在Laravel中查询关系

时间:2014-11-08 13:46:53

标签: php laravel

我正在尝试扩展我的网站搜索。您现在可以搜索标题或商品说明。每个优惠都有一个主题。主题有一个名字。我也想搜索主题名称,但我无法正常工作。 这是我尝试了多远:

$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();

没有任何损坏,但查询找不到任何带有主题名称的商品,例如搜索。

你有什么建议吗?

谢谢

1 个答案:

答案 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();