【问题标题】:Laravel eloquent difficult relation queryLaravel 雄辩的困难关系查询
【发布时间】:2017-05-27 20:32:11
【问题描述】:

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

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

数据库: 客户卡 customer_card_cmets customer_card_followups

cmets 和 followups 表都与 customer_cards 中的 ID 字段相关。两者都有外键 customer_card_id。

有没有办法做这个查询?还是我迷路了? 提前致谢。

【问题讨论】:

  • 请勿将代码发布为图片!
  • 另外,请提供您模型的粗略数据结构,或普通查询的 JSON 输出,我们可以在其中看到所有关系和属性。

标签: php mysql laravel orm eloquent


【解决方案1】:

Laravel 的 whereHas 接受第三个和第四个参数。第三个参数是与结果集的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);
});

第三个实际上有点复杂,我需要考虑如何更进一步地处理它。我现在会回答,让您朝着正确的方向前进,并很快编辑和更新帖子,并提供第三个问题的解决方案。

【讨论】:

  • 我明白了,这实际上为我解决了很多问题,因为我知道了这一点。不知道我可以使用 whereHas 进行关系查询。谢谢你。 :)
猜你喜欢
  • 2021-06-17
  • 2016-07-01
  • 2016-02-26
  • 2014-01-16
  • 2019-06-27
  • 2019-12-09
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多