[英]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.