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