为什么 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();