Eloquent 中与 JSON 字段的一对多关系

Chr*_*ker 4 php laravel eloquent

我正在尝试在数据库中的 JSON 字段和按 ID 存储音乐的表之间创建连接。所以,我有一个名为“播放列表”的表,其中有一个名为“歌曲”的字段。在这个“歌曲”字段中,我有一个array[]歌曲 ID,例如[1,2]。我尝试使用以下代码来建立这两个表之间的关系:

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

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

}
Run Code Online (Sandbox Code Playgroud)

我使用foreign_key id 是 因为歌曲表有一个id字段。

我用来从控制器检索播放列表的代码如下:

$playlist = Playlist::find($id)->songs;
print_r($playlist);
Run Code Online (Sandbox Code Playgroud)

哪个输出: [1,2]

我很可能做错了什么,没有正确理解其中的关系。有人可以解释这是如何工作的吗?我查阅了文档,但没有得到任何启发。

Jon*_*eir 6

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');
    }
}
Run Code Online (Sandbox Code Playgroud)