使用“JSON”列的 Laravel 5 关系

Dav*_*ong 0 database json eloquent laravel-5 php-7

是否可以使用 Eloquent 在 Laravel 5 中创建外键存在于列中字段中的关系JSON

如果是的话,怎么会这样呢?

示例:我有一个chats带有数据类型participantIds列的表JSONJSON数据的格式如下所示:

{"creator": "1", "recipient": "2"}
Run Code Online (Sandbox Code Playgroud)

我想users使用这些字段加入表来获取聊天的参与者。我怎么做?

Jon*_*eir 8

Laravel 没有对 JSON 关系的原生支持。

我为此创建了一个包:https ://github.com/staudenmeir/eloquent-json-relations

你可以这样使用它:

class Chat extends Model
{
    use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;

    protected $casts = [
       'participantIds' => 'json',
    ];

    public function creator()
    {
        return $this->belongsTo(User::class, 'participantIds->creator');
    }

    public function recipient()
    {
        return $this->belongsTo(User::class, 'participantIds->recipient');
    }
}

class User extends Model
{
    use \Staudenmeir\EloquentJsonRelations\HasJsonRelationships;

    public function createdChats()
    {
       return $this->hasMany(Chat::class, 'participantIds->creator');
    }

    public function receivedChats()
    {
       return $this->hasMany(Chat::class, 'participantIds->recipient');
    }
}
Run Code Online (Sandbox Code Playgroud)