如何搜索关系table?
How to search into relation table?
我有两个 table,第一个是 Category table,它有 id
和 name
列。
第二个 table 是 Product,它有 id
、category_id
和 name
列。
public function category() {
return $this->belongsTo(Category::class);
}
我的问题是如何在一个 Eloquent 或数据库查询中搜索产品名称及其类别名称?
我试过下面的代码,它适用于产品名称,但是当我搜索类别名称时,它 returns 没有。
$searchText = $request->input('search');
Product::query()
->where(function($query) use($searchText){
if($searchText) {
$query->where('name', 'LIKE', '%'.$searchText.'%')
->orWhere(function($query2) use($searchText) {
$query2->with(['category' => function($query3) use ($searchText){
$query3->where('name', 'like', '%'.$searchText.'%');
}]);
});
}
})
->paginate(8);
另外,我想问一下这个场景Eloquent和DB哪个最好用?
我想你可以使用 orWhereHas:
$searchText = $request->input('search');
$query= Product::query()->with('category');
if($searchText)
{
$query=$query->where('products.name','Like','%'.$searchText.'%')
->orWhereHas('category',function ($query)use($searchText)
{
$query->where('categories.name','Like','%'.$searchText.'%');
});
}
$query=$query->paginate(8);
您可以使用 (DB) 并连接两者 table,但没有预先加载,因此结果将只是行 ...
$query = Product::query()->with('category')
->where(function($query) use($request) {
if ($request->input('search')) {
$search_text = $request->input('search');
$query->where('name', 'Like', '%' . $search_text . '%')
->orWhereHas('category', function ($query2)use($search_text) {
$query2->where('name', 'Like', '%' . $search_text . '%');
});
}
});
$query1 = $query->paginate(8);
希望对您有所帮助。
我有两个 table,第一个是 Category table,它有 id
和 name
列。
第二个 table 是 Product,它有 id
、category_id
和 name
列。
public function category() {
return $this->belongsTo(Category::class);
}
我的问题是如何在一个 Eloquent 或数据库查询中搜索产品名称及其类别名称?
我试过下面的代码,它适用于产品名称,但是当我搜索类别名称时,它 returns 没有。
$searchText = $request->input('search');
Product::query()
->where(function($query) use($searchText){
if($searchText) {
$query->where('name', 'LIKE', '%'.$searchText.'%')
->orWhere(function($query2) use($searchText) {
$query2->with(['category' => function($query3) use ($searchText){
$query3->where('name', 'like', '%'.$searchText.'%');
}]);
});
}
})
->paginate(8);
另外,我想问一下这个场景Eloquent和DB哪个最好用?
我想你可以使用 orWhereHas:
$searchText = $request->input('search');
$query= Product::query()->with('category');
if($searchText)
{
$query=$query->where('products.name','Like','%'.$searchText.'%')
->orWhereHas('category',function ($query)use($searchText)
{
$query->where('categories.name','Like','%'.$searchText.'%');
});
}
$query=$query->paginate(8);
您可以使用 (DB) 并连接两者 table,但没有预先加载,因此结果将只是行 ...
$query = Product::query()->with('category')
->where(function($query) use($request) {
if ($request->input('search')) {
$search_text = $request->input('search');
$query->where('name', 'Like', '%' . $search_text . '%')
->orWhereHas('category', function ($query2)use($search_text) {
$query2->where('name', 'Like', '%' . $search_text . '%');
});
}
});
$query1 = $query->paginate(8);
希望对您有所帮助。