在Laravel内部查询

时间:2019-01-07 11:55:25

标签: laravel-5 eloquent

我无法使它正常工作,也许我仍然不清楚。

//get the Schools of the local government selected
        $churchs = Church::with(['confirmed' => function($q){ $q->where('status', 1);}])
                         ->where('state_id', request('state'))->get();
        return response()->json(['churchs' => $churchs]);

我也有这种关系

 public function confirmed() {
    return $this->hasOne(Confirmed::class, 'church_id', 'id');
}

当我执行上述查询时,此约束$q->where('status', 1)无效。尽管没有错误,但我也得到了状态不为0的教堂列表。

谢谢,我需要一个简单的说明。

1 个答案:

答案 0 :(得分:1)

with()仅渴望加载关系。 with()中的条件语句仅过滤关系结果,而不过滤基础模型(表)的关系结果。您的查询看起来像:将所有教堂都装入并仅用status=1确认。

要按关系的列值过滤基表结果,应使用whereHas()whereDoesntHave()方法。

$churchs = Church::whereHas('confirmed', function($query){
        $query->where('status', 1);
    })
    ->where('state_id', request('state'))
    ->get();