2017-08-06 12 views
0

Conversationという名前のモデルがあります。そのモデルではlaravel 5.3のhasMany関係にグループを追加するにはどうすればよいですか?

私はそうのような雄弁モデルCallParticipanthasMany関係を定義します。

public function participants(){ 
    return $this->hasMany('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId'); 
} 

さて、CallParticipantsは、システムプロセス、顧客、または薬することができます。

public function agents(){ 
     return $this->hasMany('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId') 
      ->whereIn('partPurpose', ['agent','user']); 
} 

さて、「薬剤」である「会話」の「参加者」を複数回にすることができます。私は、「エージェント」ので、私はこのような別の関係を定義したと考えられている全てのCallParticipantsのリストが必要ただ異なるparticipantIdと同じエージェントのための複数の行が存在することができると言って、このような:関係のみ各partUserNameための一つの行を返すように

+----------------+---------------+--------------+-------------+ 
| conversationId | participantId | partUserName | partPurpose | 
+----------------+---------------+--------------+-------------+ 
|    1 |   100 | Alex   | agent  | 
|    1 |   101 | Mary   | agent  | 
|    1 |   102 | Alex   | agent  | <-- I want to exlcude this 
+----------------+---------------+--------------+-------------+ 

方には一列(これらsortof-重複を除去するために必要メアリー、そしてアレックスのために1列)。

私はこのようなGROUPBYを追加することによって、これを実行しようとしました:

public function agents(){ 
    return $this->hasMany('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId') 
     ->whereIn('partPurpose', ['agent','user']) 
     ->groupBy('partUserName'); 
} 

しかし、これはエラーを生成します。

SQLSTATE[42000]: Syntax error or access violation: 1055 'analytics.callParticipants.participantId' isn't in GROUP BY

私はまた、以下のようなwith文でそれをやってみましたが、I同じエラーが発生する:

$conversations = Conversation::with(
     [ 
      'agents' => function($query){ 
       $query->groupBy('partUserName'); 
      } 
     ]) 
     ->get(); 

私は関係を制限する方法はありますか一意の行にのみpartUserName

答えて

0

私はこれを行う唯一の方法は、関係を "ハッキング"することだと思います。試してみることができます:

public function agents(){ 
    return $this->hasOne('App\Models\Purecloud\Analytics\CallParticipant', 'conversationId', 'conversationId') 
    ->whereIn('partPurpose', ['agent','user']) 
    ->latest(); 
} 
関連する問題