2014-10-29 115 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