Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么SQL查询Laravel不起作用?_Laravel_Laravel 5.4 - Fatal编程技术网

为什么SQL查询Laravel不起作用?

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

我有以下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();
这给了我一个错误:

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')模型中
not
groupBy
我尝试了
groupBy('ofrs')
您是否在您的用户模型中为
公告
提供
评级
?相对用户?但SQL查询中的问题,而不是模型中的问题对您的问题进行编辑是一个完全不同的问题。在这种情况下,您似乎在尝试根据计数的聚合进行分组。你到底想在这里实现什么?这是一个与您的原始问题完全不同的问题。我需要将表用户与其他表联接,并为当前用户计算相关表中的行数,这样您就可以有效地获取每个用户的报价和通知数了?我直接用SQL编写了此查询:
select rating.rate,count(offers.id)AS ofrs,计数(announcements.id)作为
users'left join
announcements
on
users
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 join
announcements
on
users
id=
announcements
用户idleft join
提供
on
用户id
提供用户idleft join
评级
on
用户id
评级
用户id
其中
用户
id
=1`它有效,但在Laravel中,请不要看问题