嘿伙计在一个客户的新项目中,我必须为具有流派的书籍制作过滤系统 .
我已经 Build 了多对多关系和数据透视表 . 到目前为止,我已经使用复选框创建了表单,因为目标是查询两个或更多类型的组合,并仅显示具有所有选定类型的结果 .
我的迁移是:
Schema::create('genres', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 40);
$table->timestamps();
});
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 125);
$table->timestamps();
});
Schema::create('book_genre', function (Blueprint $table) {
$table->increments('id');
$table->integer('genre_id')->unsigned();
$table->foreign('genre_id')->references('id')->on('genres')->onDelete('cascade');
$table->integer('book_id')->unsigned();
$table->foreign('book_id')->references('id')->on('books')->onDelete('cascade');
$table->timestamps();
});
我的模特是:
class Book extends Model{
public function genres(){
return $this->belongsToMany('App\Genre', 'book_genre');
}
}
这是我的控制器,我带有类型ID的Get数组:
class FilterController extends Controller
{
public function index()
{
$genreIds = Input::get('genres');
$books = Book::whereHas('genres', function($q) use ($genreIds){$q->whereIn('genres.id', $genreIds);})->orderBy('created_at', 'desc')->paginate(10);
}
return view('filter.index', compact('books'));
}
这里的问题是它不是通过类型的组合过滤结果,只是如果它们具有一种类型,它就过滤它们 .
我应该改变什么,所以我只能查询匹配的书籍列出的类型?
1 回答
我在Stackoverflow找到了相同的解决方案