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 - 只有在关系中没有关联的值时才返回注册表的主要内容,如果未能解决你的问题,请参考以下文章

仅当它在 AngularJs 中有值时才需要下拉

在 Web 服务中返回列表时,只有在返回值时才会出现错误?

CSS - 只有当可用空间低于某个值时才可以换行?

Hibernate JPA 关联关系

仅当最小值小于另一表中的值时才在一个表中加入值 - 雪花

深入理解 Laravel Eloquent——模型间关系(关联)