Laravel-withCount返回错误,提示SQLSTATE [42S22]:找不到列:1247不支持引用“ cars_count”(项目列表中的转发引用)

时间:2019-07-16 00:11:53

标签: php mysql laravel

通过运行:

$users = User::with('cars')->when(isset($data['cars']), function($query) use ($data) {
    $query->withCount(['cars' => function($query2) use ($data) {
        $query2->having('cars_count', $data['cars']);
    }]);
})->paginate(10);

Laravel做什么:

select `users`.*, (select count(*) from `cars` where `users`.`id` = `cars`.`user_id` having `cars_count` = 32) as `cars_count` from `users` limit 10 offset 100

我收到此错误:

SQLSTATE[42S22]: Column not found: 1247 Reference 'cars_count' not supported (forward reference in item list)

我想要它做什么:

select `users`.*, (select count(*) from `cars` where `users`.`id` = `cars`.`user_id`) as `cars_count` from `users` having `cars_count` = 32 limit 10 offset 100

1 个答案:

答案 0 :(得分:0)

以下内容使我可以匹配您所需的查询。我在构建器实例上使用->toSql()在下面显示它。

$users = User::with('cars')->when(isset($data['cars']), function($query) use ($data) {
    $query
        ->withCount('cars')
        ->having('cars_count', $data['cars']);
})->paginate(10);

输出(我的页面没有分页)

mine:  select `users`.*, (select count(*) from `cars` where `users`.`id` = `cars`.`user_id`) as `cars_count` from `users` having `cars_count` = ?
yours: select `users`.*, (select count(*) from `cars` where `users`.`id` = `cars`.`user_id`) as `cars_count` from `users` having `cars_count` = 32 limit 10 offset 100

编辑

我正在添加一个链接,该链接应该允许使用having分页,因为默认情况下在Laravel中这是不可能的。
https://github.com/justbetter/laravel-pagination-with-havings