为什么 SQL 查询 Laravel 不起作用?
Why does not work SQL query Laravel?
我有以下 SQL 查询:
return User::where("users.id", $id)
->select(array('rating.rate', User::raw('count(offers.id) AS ofrs, count(announcements.id) as appts')))
->join('announcements', 'users.id', '=', 'announcements.user_id')
->join('offers', 'users.id', '=', 'offers.user_id')
->join('rating', 'users.id', '=', 'rating.user_id')
->group_by('ofrs')
->get();
它给我一个错误:
BadMethodCallException in Builder.php line 2508: Call to undefined
method Illuminate\Database\Query\Builder::group_by()
为什么分组依据不起作用?
也是我试过的方式:
return User::where("users.id", $id)
->selectRaw('rating.rate, count(offers.id) AS ofrs, count(announcements.id) as appts')
->groupBy('appts')
->groupBy('ofrs')
->join('announcements', 'users.id', '=', 'announcements.user_id')
->join('offers', 'users.id', '=', 'offers.user_id')
->join('rating', 'users.id', '=', 'rating.user_id')
->get();
结果:
SQLSTATE[42000]: Syntax error or access violation: 1056 Can't group on 'appts'
我在SQL中直接写了SQL查询:
select rating.rate, COUNT(offers.id) AS ofrs, COUNT(announcements.id) as appts from `users` left join `announcements` on `users`.`id` = `announcements`.`user_id` left join `offers` on `users`.`id` = `offers`.`user_id` left join `rating` on `users`.`id` = `rating`.`user_id` where `users`.`id` = 1
它有效,按型号不是:
return User::where("users.id", $id)
->selectRaw('rating.rate, COUNT(offers.id) AS ofrs, COUNT(announcements.id) as appts')
->leftJoin('announcements', 'users.id', '=', 'announcements.user_id')
->leftJoin('offers', 'users.id', '=', 'offers.user_id')
->leftJoin('rating', 'users.id', '=', 'rating.user_id')
->get();
这项工作:
return User::where("users.id", $id)
->selectRaw('rating.rate, COUNT(offers.id) AS ofrs, COUNT(announcements.id) AS appts')
->leftJoin('announcements', 'users.id', '=', 'announcements.user_id')
->leftJoin('offers', 'users.id', '=', 'offers.user_id')
->leftJoin('rating', 'users.id', '=', 'rating.user_id')
->groupBy('rating.rate')
->get();
您为分组依据调用的函数名称不正确。尝试:
->groupBy('ofrs')
有关更多信息,请参阅 here。
您需要了解 SQL 的工作原理。您不能按计数别名分组。您正在寻找的可能是三个查询或三个关系。
您应该为公告创建用户关系,第二个为优惠,第三个为评级。
比 User::find($id)->announcements->count()
、User::find($id)->offers->count()
和 User::find($id)->ratings->count()
或者您可以使用 Fluent 方式,例如:
return User::find($id)
->leftJoin('announcements', 'users.id', '=', 'announcements.user_id')
->count();
我有以下 SQL 查询:
return User::where("users.id", $id)
->select(array('rating.rate', User::raw('count(offers.id) AS ofrs, count(announcements.id) as appts')))
->join('announcements', 'users.id', '=', 'announcements.user_id')
->join('offers', 'users.id', '=', 'offers.user_id')
->join('rating', 'users.id', '=', 'rating.user_id')
->group_by('ofrs')
->get();
它给我一个错误:
BadMethodCallException in Builder.php line 2508: Call to undefined method Illuminate\Database\Query\Builder::group_by()
为什么分组依据不起作用?
也是我试过的方式:
return User::where("users.id", $id)
->selectRaw('rating.rate, count(offers.id) AS ofrs, count(announcements.id) as appts')
->groupBy('appts')
->groupBy('ofrs')
->join('announcements', 'users.id', '=', 'announcements.user_id')
->join('offers', 'users.id', '=', 'offers.user_id')
->join('rating', 'users.id', '=', 'rating.user_id')
->get();
结果:
SQLSTATE[42000]: Syntax error or access violation: 1056 Can't group on 'appts'
我在SQL中直接写了SQL查询:
select rating.rate, COUNT(offers.id) AS ofrs, COUNT(announcements.id) as appts from `users` left join `announcements` on `users`.`id` = `announcements`.`user_id` left join `offers` on `users`.`id` = `offers`.`user_id` left join `rating` on `users`.`id` = `rating`.`user_id` where `users`.`id` = 1
它有效,按型号不是:
return User::where("users.id", $id)
->selectRaw('rating.rate, COUNT(offers.id) AS ofrs, COUNT(announcements.id) as appts')
->leftJoin('announcements', 'users.id', '=', 'announcements.user_id')
->leftJoin('offers', 'users.id', '=', 'offers.user_id')
->leftJoin('rating', 'users.id', '=', 'rating.user_id')
->get();
这项工作:
return User::where("users.id", $id)
->selectRaw('rating.rate, COUNT(offers.id) AS ofrs, COUNT(announcements.id) AS appts')
->leftJoin('announcements', 'users.id', '=', 'announcements.user_id')
->leftJoin('offers', 'users.id', '=', 'offers.user_id')
->leftJoin('rating', 'users.id', '=', 'rating.user_id')
->groupBy('rating.rate')
->get();
您为分组依据调用的函数名称不正确。尝试:
->groupBy('ofrs')
有关更多信息,请参阅 here。
您需要了解 SQL 的工作原理。您不能按计数别名分组。您正在寻找的可能是三个查询或三个关系。
您应该为公告创建用户关系,第二个为优惠,第三个为评级。
比 User::find($id)->announcements->count()
、User::find($id)->offers->count()
和 User::find($id)->ratings->count()
或者您可以使用 Fluent 方式,例如:
return User::find($id)
->leftJoin('announcements', 'users.id', '=', 'announcements.user_id')
->count();