使用laravel 7和数据透视表,我有这样的东西:
型号:显示
public function genres()
{
return $this->belongsToMany('App\ShowGenre');
}
型号:ShowGenre
public function shows()
{
return $this->belongsToMany('App\Show', 'show_show_genre')->orderBy('name', 'asc');
}
在mysql数据库中,我有show_genres,在其中放置了show_id和genre_id。所以我想创建一些基于建议的东西。
在我的页面底部,我想显示5个具有相同类型的随机电视节目。一些电视节目具有多种流派,所以我该如何显示它,并限制为suma 5。
show_show_genre
应该具有show_id
和show_genre_id
,因为show_show_genre
是数据透视表。 show_genres
不是数据透视表,因为它是代码中描述的体裁表。另外,您不需要在return语句中设置show_show_genre
,因为Laravel会自动识别出它的数据透视表。尝试这样的事情:
$show = Show::findOrFail($id);
$featuredShows = Show::whereHas('genres', function ($query) use ($show) {
$query->whereIn('show_genres.id', $show->genres()->pluck('id')->toArray());
})->where('id', '!=' , $show->id)->with(['genres'])->inRandomOrder()->limit(5)->get();