我有三个表:realties
、room_types
和 realty_room_type
:
realty_room_type
----------------
id
realty_id
room_type_id
room_type
----------------
id
code
在我的 Realty
模型中,我设置了 rooms()
关系:
public function rooms()
{
return $this->hasMany(Room::class);
}
我正在尝试使用 with()
方法预先加载 rooms()
关系。我想自定义从关系中返回的内容,因此我传递了一个像这样的回调函数:
$realty = Realty::
where('id', $realtyId)
->with([
'rooms' => function ($query) use ($realtyId) {
$query
->leftJoin('room_types', 'room_types.id', '=', 'realty_room_type.room_type_id')
->selectRaw('code, COUNT(*)')
->groupBy('code');
}
])
->get()
);
问题是我在使用 $realty->rooms
访问关系时得到一个空集合。知道为什么吗?
但是,如果我像这样转储并终止回调函数的语句:
Realty::
where('id', $realtyId)
->with([
'rooms' => function ($query) use ($realtyId) {
dd($query
->leftJoin('room_types', 'room_types.id', '=', 'realty_room_type.room_type_id')
->selectRaw('code, COUNT(*)')
->groupBy('code'));
}
])
->get()
);
我得到了我想要的 rooms()
关系。
提前谢谢您。
最佳答案
您不需要在callback
函数中return
并调用get()
。 Here您可以找到详细信息。
$realty = Realty::
where('id', $realtyId)
->with([
'rooms' => function ($query) use ($realtyId) {
$query
->leftJoin('room_types', 'room_types.id', '=', 'realty_room_type.room_type_id')
->selectRaw('code, COUNT(*)')
->groupBy('code');
}
])
->get();
关于laravel - with() 的回调函数返回空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47928648/