Laravel-相关模型中的唯一用户列表
我的问题是关于使用Elount的查询生成器确保相关模型中的唯一用户数组 我正在使用的一个应用程序的一个功能是显示与其他用户的活动对话列表,即短信服务风格。每个对话都应该预览最近收到的消息。由于对话可以在多个用户之间进行,因此您和John之间的对话应该不同于您、John和Jane之间的对话 我已经建立了两个相关的模型:Message和User。消息以以下方式与用户相关:Laravel-相关模型中的唯一用户列表,laravel,eloquent,Laravel,Eloquent,我的问题是关于使用Elount的查询生成器确保相关模型中的唯一用户数组 我正在使用的一个应用程序的一个功能是显示与其他用户的活动对话列表,即短信服务风格。每个对话都应该预览最近收到的消息。由于对话可以在多个用户之间进行,因此您和John之间的对话应该不同于您、John和Jane之间的对话 我已经建立了两个相关的模型:Message和User。消息以以下方式与用户相关: public函数已发送到(){ 返回$this->belongtomany('App\User','message\u user
public函数已发送到(){
返回$this->belongtomany('App\User','message\u users');
}
我正在尝试返回消息控制器中的唯一对话列表,如下所示:
$show=\App\Message::where('team\u id',$team\u id)
->其中('user_id',Auth::user()->id)
->使用(['sent\'u to'=>函数($query){
$query->distinct();
}])
->使用('user'))
->orderBy('created_at','desc')->skip($offset)->take($limit)->get();
返回$show;
->with(['sent_'…
部分是我有点迷茫的地方。当然,我的目的是得到一个唯一收件人的列表;但是,我得到了所有结果。任何帮助都将不胜感激
使用jedrzej.kurylo的建议进行更新
jedrzej.kurylo提出以下建议:
$show=\App\Message::where('team\u id',$team\u id)
->其中('user_id',Auth::user()->id)
->使用(['sent_to',函数($query){
$query->groupBy('id');
}])
->使用('user'))
->orderBy('created_at','desc')->skip($offset)->take($limit)
->get();
返回$show;
这会产生以下错误:
由于这是一种多对多关系(用户通过“Message\u User”表链接到消息),“id”实际上是指数据透视表的id。我实际上希望获得数据透视表的“User\u id”。更改为->groupBy('User\u id')
(数据透视表上的一个值)会产生以下错误:“mb\u strops()期望参数1为字符串,对象为“给定”。这是一个完全不同的错误
我正在做一个变通方法,当它开始工作时,我会用它进行更新——但这需要一些更明确的查询。我觉得这应该是可能的!尝试按ID对相关结果进行分组:
->with(['sent_to' => function($query) {
$query->groupBy('id');
}])
密钥位于错误消息“不兼容sql\u模式=仅\u完整\u分组依据”中 如果禁用此模式,您的分组方式应按预期工作 有关禁用此模式的两种方法,请参见此问题 和mysql文档,了解有关设置的更多信息。
谢谢!我以前尝试过,但出现了一个错误。不过,我认为这可能是我需要做的事情!我将更新我的原始问题,详细说明如何使用groupBy()在约束中产生。这很有效——谢谢!马克·沃勒让我克服了最初禁止我使用groupBy的错误,但是,我接受了他的答案。马克,这帮了大忙!我仍有一些工作要做,以消除查询返回值中的纠结,但你的回答让我找到了一个解决方案。这是给任何有此问题的人的一个提示将来:即使按照上面的说明操作,我还是会不断出现错误。Laravel默认将mysql设置为“严格”模式,这需要关闭。有关详细信息,请参阅。