我正在尝试扩展我的网站搜索。您现在可以搜索标题或商品说明。每个优惠都有一个主题。主题有一个名字。我也想搜索主题名称,但我无法正常工作。 这是我尝试了多远:
$adverts = Advert::orderBy('created_at', 'desc')->active();
if($search)
$adverts = $adverts->whereHas('subjects', function($q) use ($search)
{
$q->where('name', 'like', '%$search%');
})
->where(function($query) use ($search) {
$query->where("title", "like", "%$search%");
$query->orWhere("description", "like", "%$search%");
})
->get();
没有任何损坏,但查询找不到任何带有主题名称的商品,例如搜索。
你有什么建议吗?
谢谢
答案 0 :(得分:0)
Laravel中where
函数的默认布尔运算符是AND
。这意味着你的代码实际上在说:
名称包含$ search AND title或描述包含$ search
显然你想要的是OR
。
只需将where
后的whereAs
更改为orWhere
。
$adverts = $adverts->whereHas('subjects', function($q) use ($search)
{
$q->where('name', 'like', '%$search%');
})
->orWhere(function($query) use ($search) {
$query->where("title", "like", "%$search%");
$query->orWhere("description", "like", "%$search%");
})
->get();