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

标签 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);
} 

我正在尝试使用 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/

相关文章:

mysql - 从查询构建器转换为具有 3 个表的 Eloquent 模型

mysql - 如何使用查询构建器 laravel 在 leftjoin 期间加入子查询?

laravel - querybuilder上的reverse()get()更改集合结果

php - Laravel 选择行有一列包含输入变量

php - Laravel 4 中 server.php 文件的用途是什么?

laravel - 存储方法无法使用资源路由

php - 在 laravel 5.6 中迁移时如何检查 mongo 集合是否存在?

Laravel 带参数自动解析

Laravel 6 在从 CakePHP 2.x 迁移期间使用自定义 Hasher

mysql - Laravel 5.3 组查询构建器访问冲突