为什么SQL查询Laravel不起作用?
我有以下SQL查询:为什么SQL查询Laravel不起作用?,laravel,laravel-5.4,Laravel,Laravel 5.4,我有以下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')
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();
这给了我一个错误:
Builder.php第2508行中的BadMethodCallException:调用未定义
方法\Database\Query\Builder::group\u 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();
为group by调用的函数名不正确。尝试:
->groupBy('ofrs')
有关详细信息,请参阅。为group by调用的函数名不正确。尝试:
->groupBy('ofrs')
有关更多信息,请参阅。您需要了解SQL的工作原理。您不能按计数的别名分组。您要查找的可能是三个查询或三个关系 您应该在用户上为公告创建关系,第二个为报价创建关系,第三个为评级创建关系 比您将
User::find($id)->公告->计数()
,User::find($id)->提供->计数()
和User::find($id)->评级->计数()
或者,您可以使用流畅的方式进行以下操作:
返回用户::查找($id)
->leftJoin('announcements'、'users.id'、'='、'announcements.user_id')
->计数()代码>您需要阅读SQL的工作原理。您不能按计数的别名分组。您要查找的可能是三个查询或三个关系
您应该在用户上为公告创建关系,第二个为报价创建关系,第三个为评级创建关系
比您将User::find($id)->公告->计数()
,User::find($id)->提供->计数()
和User::find($id)->评级->计数()
或者,您可以使用流畅的方式进行以下操作:
返回用户::查找($id)
->leftJoin('announcements'、'users.id'、'='、'announcements.user_id')
->计数()
groupBy('ofrs')
不是groupBy('ofrs')
我试过groupBy('ofrs')
你是否在你的用户模型中为公告
、提供
和评级
建立了关系?相对的用户?但是SQL查询中存在问题,而不是在groupBy('ofrs')模型中
notgroupBy
我尝试了groupBy('ofrs')
您是否在您的用户模型中为公告
,提供
和评级
?相对用户?但SQL查询中的问题,而不是模型中的问题对您的问题进行编辑是一个完全不同的问题。在这种情况下,您似乎在尝试根据计数的聚合进行分组。你到底想在这里实现什么?这是一个与您的原始问题完全不同的问题。我需要将表用户与其他表联接,并为当前用户计算相关表中的行数,这样您就可以有效地获取每个用户的报价和通知数了?我直接用SQL编写了此查询:select rating.rate,count(offers.id)AS ofrs,计数(announcements.id)作为
users'left joinannouncements
onusers
id
=announcements
用户idleft join提供
on用户id
提供用户idleft join评级
on用户id
评级
用户id
其中用户
id
=1`这是可行的,但在Laravel中,问题看起来不一样请编辑您的问题是一个完全不同的问题。在这种情况下,您似乎在尝试根据计数的聚合进行分组。你到底想在这里实现什么?这是一个与您的原始问题完全不同的问题。我需要将表用户与其他表联接,并为当前用户计算相关表中的行数,这样您就可以有效地获取每个用户的报价和通知数了?我直接用SQL编写了此查询:select rating.rate,count(offers.id)AS ofrs,计数(announcements.id)作为
users'left joinannouncements
onusers
id=announcements
用户idleft join提供
on用户id
提供用户idleft join评级
on用户id
评级
用户id
其中用户
id
=1`它有效,但在Laravel中,请不要看问题