Отношение один ко многим в Eloquent с полем JSON - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь создать соединение между полем JSON в моей базе данных и таблицей, в которой музыка хранится по идентификатору.Итак, у меня есть таблица под названием «плейлисты», в которой есть поле «песни».В этом поле «песни» у меня есть array[] идентификаторов песен, например [1,2].Я попробовал следующий код, чтобы установить связь между этими двумя таблицами:

class Playlist extends Model
{
    protected $table = 'playlists';

    public function songs()
    {
        return $this->hasMany('App\Music', 'id');
    }

}

Я использовал foreign_key id из-за таблицы songs , которая имеет id field.

Код, который я использовал для получения списка воспроизведения из контроллера, выглядит следующим образом:

$playlist = Playlist::find($id)->songs;
print_r($playlist);

Какие выходы: [1,2]

Скорее всего, я сделал что-то не так, неправильно поняв отношения.Может кто-нибудь объяснить, как это работает?Я посмотрел документацию, но ничего не понял.

Ответы [ 2 ]

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

Laravel не имеет встроенной поддержки отношений JSON.

Я создал пакет для этого: https://github.com/staudenmeir/eloquent-json-relations

Если вы переименуете столбец songs в song_ids, вы можете определитьотношение многих ко многим, подобное этому:

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

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

    public function songs()
    {
        return $this->belongsToJson('App\Music', 'song_ids');
    }
}

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

    public function playlists()
    {
       return $this->hasManyJson('App\Playlist', 'song_ids');
    }
}
0 голосов
/ 07 декабря 2018

У меня действительно хорошее решение для хранения данных в столбце в формате json.Помогите мне в предыдущем проекте интернет-магазина

https://scotch.io/tutorials/working-with-json-in-mysql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...