2017-01-21 2 views
0

mysqlが私の強い訴訟ではないので、これを理解できないようです。私はここで少し研究をしましたが、2つと2つをまとめることができないので、私はコミュニティにいくつかの助けを求めています。グループ最新のメッセージによる会話Laravel

私は2人のユーザーがお互いに話すことができる私のLaravelアプリ内にチャット機能を構築しています。私は受信ボックス(会話をまとめてグループ化する)の部分を構築する方法を理解できません。最後のメッセージを送信してグループ化する方法を知りました。

public function lastMessages() { 
    return $this->hasMany('App\Message', 'recipient_id') 
     ->select('*') 
     ->join(DB::raw('(Select max(id) as id from messages group by author_id) LatestMessage'), function($join) { 
      $join->on('messages.id', '=', 'LatestMessage.id'); 
     }) 
     ->orderBy('created_at', 'desc'); 
} 

私のメッセージテーブルは、次の要素で構成されます:author_idrecipient_idmessagedviewed

次は私のUserモデルの内側にあります。

私がしなければならないことは、私たちが発信して最新のメッセージを受信ボックスのエントリとして表示するかどうかをグループ化して、そのメッセージをクリックすると残りの会話がページに表示されます。

上記の私の現在のSQLでは、会話全体ではなく、最後のメッセージが1つだけ表示されます。

ご協力いただきありがとうございます。

答えて

0

まず、関係関数を論理(クエリ)関数とは別にしておくべきだと思います。 私が正しくあなたの質問を理解している場合、あなたはこのような何かをする必要があります

Message::where('recipient_id',$userid)->orWhere('author_id',$userid)->orderBy('created_at','desc')->get(); 

これはあなたを与えるだろうメッセージが送信したり、ユーザーが受信しました。 AuthorMessageモデルであなたの質問を明確にしてください。

+0

私はそれをしましたが、それは配列のエントリの重複を私に与えます。受信者ID == $ユーザーIDとauthor_id == $ユーザーIDの場合、2つの複製が生成されます。私はgroupBy recipient_idにしようとしましたが、それはauthor_idを省略し、逆も同様です。私はそれが意味をなさないことを願っています – max234435

+0

私はほぼ同時に受信者とauthor_idでグループ化する必要があります... – max234435

関連する問題