【发布时间】:2015-02-24 06:25:51
【问题描述】:
我正在改造一个图书推荐个人网站。我想按多个标准过滤图书。
例如,我想显示所有既是哲学又是科幻小说的书籍。彼得瓦特的盲视就是一个例子。
现在我只能做一个标准过滤器:
我有一个用于
的数据透视表示范书
public function genres()
{
return $this->belongsToMany('App\Genre', 'bookgenres', 'book_id', 'genre_id');
}
模型类型:
public function books()
{
return $this->belongsToMany('App\Book', 'bookgenres', 'genre_id', 'book_id');
}
数据透视表 bookgenres 示例:
id,book_id,genre_id
1 - 23 - 4
2 - 23 - 5
3 - 24 - 4
简而言之:第 23 本书既是 SF(#4)又是哲学(#5),而第 24 本书只是 SF(#4)
有了这些,我只是查询
$genre = 4;
$books = Genre::find($genre)->books()->get();
并使用标准的@foreach 循环列出书籍
要做的事情:按两种类型过滤集合,而不是一种。
提前致谢!
【问题讨论】:
-
我认为您将不得不为此使用连接。有枢轴查询功能,但我怀疑它们是否可以按照您的意愿使用。但如果你想尝试,就像
Book::wherePivot('genre_id', 'someId')->wherePivot('genre_id', 'someOtherId')->get()。
标签: laravel filter eloquent relationship