首页 > 解决方案 > Laravel Eloquent hasMany 具体关系行返回

问题描述

我有 2 个包含以下示例数据的表

培训班

ID cl1
1 一种
2 b

优惠

ID course_id
1 1 2019
2 1 2020
3 2 2019

在各自的模型中,一对多关系被正常定义(工作正常)

我想仅通过所选关系选择具有特定年份价值的课程。

当我尝试以下代码时,它给了我正确的课程表行,但返回关系中提供表的 id 1 和 2。

Course::with(['offer'])
            ->whereHas('offer', function ($q) {
                $q->where('year',2020);
            })                
            ->get();

我怎样才能只获得选定的关系(对于这个例子只有 id 2)。

仅供参考:由于其他一些需要,我不能使用Offer::with(['course'])

标签: laraveleloquent

解决方案


您需要使用相同的逻辑进行急切加载

Course::with(['offer' => function ($query) {
    $query->where('year', 2020);
}])->whereHas('offer', function ($query) {
    $query->where('year', 2020);
})->get();

可以通过将闭包保存到变量来简化

Course::with(['offer' => $closure = function ($query) {
    $query->where('year', 2020);
}])->whereHas('offer', $closure)->get();

推荐阅读