Laravel雄辩的困难关系查询

时间:2017-05-27 20:32:12

标签: php mysql laravel orm eloquent

我是一个朋友的系统,但偶然发现了一个问题。 我有3个型号(customerCard,customerCardComment和customerCardFollowup)。

如果您看到下面的图片以了解我想要实现的目标,那就更好了。如你所见,我试图获得一个结果,我得到一个customerCard模型,其中售出的字段等于0,而customerCard模型没有customerCardComment模型,其中类型字段等于1,2或3,并且customerCard也没有任何customerCardFollowup。

数据库: customer_cards customer_card_comments customer_card_followups

评论和后续表都与customer_cards中的ID字段相关。两者都有外键customer_card_id。

有没有办法进行此查询?还是我迷路了? 提前谢谢。

enter image description here

1 个答案:

答案 0 :(得分:1)

Laravel的whereHas接受第3和第4个参数。第3个参数是针对结果集count的比较运算符,第4个参数是要比较的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);
});

第三个实际上有点复杂,我需要考虑如何接近它。我现在回答是为了让你朝着正确的方向前进,并在短期内编辑并更新第3个问题的解决方案。