[英]Laravel multiple pivot relationship
我正在努力创建共享单个模型的两个枢轴之间的关系。
有问题的数据中心是item_tag和playlist_tag。 下面,我描述了表和已经创建的关系。
因此,我目前可以获取播放列表的项目,播放列表的项目,项目的标签,播放列表的标签。
我正在努力做的是:
我相信这可以通过“ manyThrough”完成,但老实说我迷路了。
更多关系细节
标签可同时应用于播放列表和项目
表结构示例
Table : items
id
name
Table : playlists
id
name
Table : item_playlist
item_id
playlist_id
Table : tags
id
name
Table : item_tag
item_id
tag_id
Table : playlist_tag
playlist_id
tag_id
示例类/关系结构
class Playlist extends Model
{
public function items()
{
return $this->belongsToMany(Item::class)->withTimestamps();
}
public function tags()
{
return $this->belongsToMany(Tag::class)->withTimestamps();
}
}
...
class Item extends Model
{
public function playlists()
{
return $this->belongsToMany(Playlist::class)->withTimestamps();
}
public function tags()
{
return $this->belongsToMany(Tag::class)->withTimestamps();
}
}
...
class Tag extends Model
{
public function items()
{
return $this->belongsToMany(Item::class)->withTimestamps();
}
public function playlists()
{
return $this->belongsToMany(Playlist::class)->withTimestamps();
}
}
获取与给定播放列表共享至少一个标签的项目:
$tags = $playlist->tags()->pluck('id');
$items = Item::whereHas('tags', function($query) use($tags) {
$query->whereIn('id', $tags);
})->get();
获取与给定播放列表共享所有标签的项目:
$tags = $playlist->tags()->pluck('id');
$items = Item::whereHas('tags', function($query) use($tags) {
$query->whereIn('id', $tags);
}, '=', $tags->count())->get();
反向的工作方式相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.