2014-11-08 112 views
0

我正在尝试扩展我的网站搜索。您现在可以搜索标题或在要约说明中搜索。每个报价都有一个主题。该主题有一个名称。我也想搜索主题名称,但我无法工作。 这是多远我试过:查询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(); 

没有什么破损的,但查询没有找到与主题名称,如搜索任何优惠。

你有什么建议吗?

谢谢

+0

我敢肯定你的'where'后'whereHas'应该是'orWhere' – lukasgeiter 2014-11-08 14:43:32

+0

在'''like'''查询,而你在它把一个变量名,你使用单引号的名称。我建议用双引号或连接变量。 – ArjanSchouten 2014-11-08 22:15:33

+0

谢谢@lukasgeiter你修好了! – Strernd 2014-11-09 20:26:22

回答

0

在Laravel为where功能的默认布尔运算符AND。这意味着你的代码实际上是在说:

凡名称中包含$搜索和标题或描述包含$搜索

显然,你需要的是在那里的OR

因此只需将whereAs之后的where更改为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();