2014-11-08 175 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();