繁体   English   中英

雄辩的JSON字段一对多关系

[英]One To Many Relationship in Eloquent with JSON field

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

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

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

}

我使用foreign_key id是因为songs表具有一个id字段。

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

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

输出: [1,2]

我很可能做错了事,没有正确理解关系。 有人可以解释这是如何工作的吗? 我查阅了文档,但没有任何明智的选择。

我有一个很好的解决方案,可以将数据保留在json格式的列中。 它可以帮助我在以前的项目网上商店

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM