Laravel 5 关系使用 'JSON' 列

Laravel 5 relationship using a 'JSON' column

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

如果是,怎么会?

示例: 我有一个名为 chats 的 table,它有一个 participantIds 列,数据类型为 JSON。数据的 JSON 格式如下所示:

{"creator": "1", "recipient": "2"}

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

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');
    }
}