with()的回调函数返回空集合

时间:2017-12-21 16:05:54

标签: laravel laravel-query-builder

我有三张牌桌:realtiesroom_typesrealty_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);
} 

我正在尝试使用rooms()方法急切加载with()关系。我想自定义从关系返回的内容,所以我传递了一个这样的回调函数:

$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()关系中我想要的内容。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

您无需return callbackget()功能并致电$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(); Here您可以找到详细信息。

created_event = service.events().update(calendarId=calendar_id,sendNotifications=True, eventId=event_id, body=modified_event).execute()