我有一个名为Conversation
的elquent模型。
在该模型中,我在一个雄辩的模型hasMany
上定义CallParticipant
关系,如下所示:
public function participants(){
return $this->hasMany('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId');
}
现在,CallParticipants
可以是系统进程,客户或代理。我需要一个被认为是“代理人”的所有CallParticipants
的列表,所以我定义了另一个这样的关系:
public function agents(){
return $this->hasMany('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId')
->whereIn('partPurpose', ['agent','user']);
}
现在,“代理人”可以在“对话”中多次成为“参与者”,也就是说,只有不同的ParticipId,同一代理可以有多行,如下所示:
+----------------+---------------+--------------+-------------+
| conversationId | participantId | partUserName | partPurpose |
+----------------+---------------+--------------+-------------+
| 1 | 100 | Alex | agent |
| 1 | 101 | Mary | agent |
| 1 | 102 | Alex | agent | <-- I want to exlcude this
+----------------+---------------+--------------+-------------+
我需要删除这些sortof-duplicatelicates,以便关系只为每个partUserName
返回一行(Mary为一行,Alex为一行)。
我尝试通过添加groupBy这样做:
public function agents(){
return $this->hasMany('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId')
->whereIn('partPurpose', ['agent','user'])
->groupBy('partUserName');
}
但这会产生错误:
SQLSTATE [42000]:语法错误或访问冲突:1055'isalytics.callParticipants.participantId'不在GROUP BY中
我也尝试在with
语句中执行此操作,但我收到同样的错误:
$conversations = Conversation::with(
[
'agents' => function($query){
$query->groupBy('partUserName');
}
])
->get();
我是否可以将关系限制为仅包含唯一partUserName
答案 0 :(得分:0)
我认为这样做的唯一方法是“黑客”关系。你能尝试一下:
public function agents(){
return $this->hasOne('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId')
->whereIn('partPurpose', ['agent','user'])
->latest();
}