Eloquent - 只有在关系中没有关联的值时才返回注册表
Posted
技术标签:
【中文标题】Eloquent - 只有在关系中没有关联的值时才返回注册表【英文标题】:Eloquent - Return Registry only if it doesn't have a value asossiated in the relationship 【发布时间】:2020-11-21 19:10:46 【问题描述】:我有这个问题,也许有人可以帮助我:)
Student::whereHas('courses.group', function ($query) use ($year)
$query->where('year', '!=', $year);
)->orDoesntHave('courses')->where('active', '=', '1')->get()
我有这个雄辩的查询,它有效,但我有一个问题。我真正需要进行该查询的是所有注册表students
通过枢轴groups
关联courses
,在它拥有的所有组中,它应该返回student
,只有当它没有'没有在他的组中注册的$year
值,或者如果没有任何courses
。任何想法? :)
【问题讨论】:
查询好像没问题,你有什么问题? 是的,该查询工作正常,但这不是我真正需要的,因为我只需要学生没有关联的包含 $year 值的组。例如,如果 $year 是 2021,它应该返回学生“Kirk”,因为他有两个组,每个组都与年份值 2020 和 2019 相关联。但它不应该返回“Lars”,因为他有两个组,每个组都与年份相关联价值 2020 年和 2021 年。 【参考方案1】:WhereHas()
与whereDoesntHave()
具有逆逻辑。您需要更改查询逻辑,但应该直截了当,据我了解,这应该可以工作。
Student::whereDoesntHave('courses.group', function ($query) use ($year)
$query->where('year', $year);
)->orDoesntHave('courses')
->where('active', '=', '1')
->get();
【讨论】:
我不知道whereDoesntHave
存在,非常感谢,你救了我的命 :) 顺便说一句:最后一个 where
声明只有在我将它移到最后一个 get()
后面时才有效。
super :) 如果有帮助记得采纳答案以上是关于Eloquent - 只有在关系中没有关联的值时才返回注册表的主要内容,如果未能解决你的问题,请参考以下文章