2017-05-27 192 views
0

我是一个朋友的系统,但偶然遇到了一个小问题。 我有3个模型(customerCard,customerCardComment和customerCardFollowup)。Laravel雄辩的难关系查询

如果你看到下面的图片来理解我想要达到的效果会更好。正如你所看到的,我试图得到一个结果,我得到一个customerCard模型,其中卖场等于0,而customerCard模型没有customerCardComment模型,其中type字段等于1,2或3,而customerCard也是没有任何customerCardFollowup。

数据库: customer_cards customer_card_comments customer_card_followups

双方的意见和followups表在customer_cards相关的ID字段。两者都有外键customer_card_id。

有没有办法做这个查询?还是我输了? 在此先感谢。

enter image description here

+0

请不要将代码发送至图片! – manniL

+0

另外,请提供您的模型的粗略数据结构,或者在正常查询的JSON输出中查看所有关系和属性。 – manniL

回答

1

Laravel的whereHas接受第3和第4个参数。第三个参数是结果集的count的比较运算符,第四个参数是number进行比较。这样便解决了第一个问题:

CustomerCard::where(function($query){ 
    $query->where('sold', 0) 
     ->whereHas('customerCardComment', function($query){ 
      return $query->whereIn('type', [1,2,3]); 
     }, '=', 0); 
}); 

接下来,你可以使用->has()数从关系中返回的记录数,这将解决你的第二个问题:

CustomerCard::where(function($query){ 
    $query->where('sold', 0) 
     ->whereHas('customerCardComment', function($query){ 
      return $query->whereIn('type', [1,2,3]); 
     }, '=', 0) 
     ->has('customerCardFollowup', '=', 0); 
}); 

第三届一个实际上是更复杂一些,我需要考虑如何处理这个问题。现在我会回答你的问题,让你朝着正确的方向前进,编辑和更新这篇文章,并尽快解决第三个问题。

+0

我明白了,这实际上解决了许多问题,我知道这一点。不知道我可以使用whereHas进行关系查询。谢谢。 :) – Kaizokupuffball