Отношения Laravel 5 с использованием столбца JSON - PullRequest
0 голосов
/ 21 декабря 2018

Можно ли использовать Eloquent для создания отношения в Laravel 5, где внешний ключ существует в поле в столбце JSON?

Если это так, то как?

Пример: у меня есть таблица с именем chats со столбцом participantIds и типом данных JSON.Формат данных JSON выглядит следующим образом:

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

Я хочу присоединиться к таблице users, используя эти поля, чтобы получить участников чатов.Как мне это сделать?

1 Ответ

0 голосов
/ 21 декабря 2018

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