2014-10-29 158 views
0
$query = LeadsModel::with(
          array(
            'emails' => function ($q) use ($inputs) 
            { 
             $q->orwhere('email','like',"%john%"); 
             $q->orwhere('email','like',"%mark%"); 
            } 
           ) 
          ) 
          ->whereHas 
          (
           'emails', function ($q) use ($inputs) 
           { 
            $q->orwhere('email','like',"%john%"); 
            $q->orwhere('email','like','%mark%'); 
           } 
          ); 

    $res = $query->get(); 

    display_output($res); 
    return; 

上面的代碼只返回所有記錄,沒有條件適用於結果。我不知道什麼是錯的。我想要的是添加條件的查詢與父關聯的子表,但將返回其中施加條件父子數據Laravel渴望加載嵌套或條件

另一個問題:

  • 我如何可以添加多個OR條件嵌套在急切的加載條件?
  • 我該如何控制條件的優先順序?可以說我將有2個或3個條件相同的優先級,我將有一個嵌套的立即加載條件

更新

這仍然記錄所有的數據與另一條件和使用條件,不應用條件。

$query = LeadsModel::with(
          array(
            'emails' => function ($q) use ($inputs) 
            { 
             $q->orWhere('email','like',"%john%"); 
             $q->orWhere('email','like',"%james%"); 
            } 
           ) 
          ) 
          ->whereHas 
          (
           'emails', function ($q) use ($inputs) 
           { 
            $q->where('email','like',"%john%")->orWhere('email','like','%james%'); 
           } 
          ); 

    $res = $query->get(); 

    display_output($res); 
    return; 
正常SQL

我想這將是

選擇線索。 ,lead_detail_emails。 from lead,lead_detail_emails其中 leads.id = lead_detail_emails.lead_id和 (lead_detail_emails.email like'%john%'或lead_detail_emails.email like'%james%');

+0

您應該添加一些例子/代碼,你想要什麼來實現 – 2014-10-29 11:03:50

+0

我有更新了我的問題。謝謝 – Ponce 2014-10-29 11:06:44

+0

請解釋你想從數據庫中得到什麼記錄 - 現在看來你想要得到像john或james這樣的電子郵件的leadmodel記錄,併爲他們獲取僅有名稱john或james的相關模型電子郵件。 – 2014-10-29 13:02:31

回答

3

您需要嵌套其中:

whereHas('emails', function ($q) 
{ 
    $q->where(function ($q) { 
     $q->where('email','like',"%john%") 
     ->orWhere('email','like','%mark%'); 
    }); 
}) 

這是whereHas與數據透視表例如查詢(belongsToMany):

select * from `table` 
    where `table`.`deleted_at` is null 
     and (select count(*) from `related_table` inner join `pivot_table` on `related_table`.`id` = `pivot_table`.`related_id` 
    where `pivot_table`.`user_id` = `table`.`id` 
     and (`some_field` like ? or `some_field` like ?)) >= 1 
+0

該代碼返回沒有應用條件的所有記錄。我已經用完整的熱切加載更新了這個問題。 – Ponce 2014-10-29 12:47:15

+0

對不起,我的錯誤與上面的評論。這隻會返回約翰的記錄。 – Ponce 2014-10-29 12:59:26

+0

@Ponce你說它會忽略第二個地方,這是不正確的。所以檢查你的期望和實際結果。這是你需要的。 – 2014-10-29 13:12:03