直截了当地说到这里。 我的项目列表中有搜索功能。但是,我也想按类别搜索所有项目。
这是我到目前为止所做的事情。 我真的很喜欢laravel和eloquent所以请耐心等待。
类别表
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->increments('id');
$table->string('code', 30);
$table->string('name');
$table->softDeletes();
$table->timestamps();
});
}
项目表
public function up()
{
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id')->unsigned();
$table->string('code', 30);
$table->string('name');
$table->softDeletes();
$table->timestamps();
});
Schema::table('items', function($table){
$table->foreign('category_id')->references('id')->on('categories');
});
}
这是我的代码:
public function search(){
$q = Input::get ( 'q' );
if($q != ""){
$items = Item::with('Category')
->where ( 'name', 'LIKE', '%' . $q . '%' )
->orWhere ( 'code', 'LIKE', '%' . $q . '%' )
->whereHas('Category', function($cat){
$cat->where('name', 'hardware');
})->paginate(1)->setPath('');
$items = $items->appends ( array (
'q' => Input::get ( 'q' )
) );
}else{
$items = Item::orderBy('id', 'desc')->paginate(10);
}
$softDeletesItems = Item::onlyTrashed()->get();
return view('item.index', compact('items', 'softDeletesItems'));
}
有没有办法让我做orWHere('category.name', 'LIKE', '%'. $q .'%')
?
答案 0 :(得分:1)
->whereHas('Category', function($query) use($q){
$query->where('name', 'LIKE', '%'. $q .'%')
})->paginate(1)->setPath('');
答案 1 :(得分:1)
这就是我为实现它所做的一切。
$items = Item
::join('categories', 'items.category_id', '=', 'categories.id')
->where ( 'items.name', 'LIKE', '%' . $q . '%' )
->orWhere ( 'items.code', 'LIKE', '%' . $q . '%' )
->orWhere('categories.name', 'LIKE', '%' . $q . '%')
->select('*')
->paginate(1)->setPath('');