ErrorException:
stripos() expects parameter 1 to be string, object given
对于groupBy()
方法中的with()
调用
$user = User::with([
'pricelists' => function($query) {
$query->groupBy(function($var) {
return Carbon::parse($var->pivot->created_at)->format('m');
});
}
])->where('id', $id)->get();
[我已经看过几篇有关如何解决此问题的文章,并且不能雄辩地使用groupBy()
,但我真的不明白为什么...
要清楚:
User
和Pricelist
模型与默认的timestamps()
方法之间存在多对多关系。我正在尝试按照从当前用户那里下载的价格来对下载的价格列表进行分组。
经过几次尝试,我刚刚从=> function($query...
方法中删除了上面显示的with()
语句,只是离开了with(['pricelist'])
来获取所有数据集并尝试了此操作:
$user->pricelists = $user->pricelists->groupBy(function($var) {
return Carbon::parse($var->pivot->created_at)->format('m');
});
return $user->pricelists;
并且它工作正常,并且每个月返回一个包含多个数组的数组...但是像这样返回它:
return $user;
仅返回具有所有条目的1个数组...我现在还没有真正了解它的含义...
您在提供的两个代码中使用的两个groupBy()
方法是完全不同的方法。
在回调中使用它的第一个groupBy()
实际上是由$query
对象调用的query builder调用的。这里的groupBy()
用于将SQL GROUP BY Statement添加到查询中。并且根据documentation,它仅将字符串变量作为参数。
您的第二个代码中的groupBy()
被$user->pricelists
调用,这是一个幼虫eloquent collection。这里的groupBy()
方法实际上来自基本集合类,用于将集合内的项目分组到由传递给函数的参数定义的不同键下的多个集合中。请阅读文档here。
对于您的情况,第二个groupBy()
是您应该使用的一个,因为您打算使用回调,并将允许您使用更复杂的逻辑。