2016-10-24 21 views
1
public function chats() 
{ 
    return $this->hasMany('App\Chat','sender_id')->orWhere('receiver_id',\Auth::id()); 
} 

私の要件は、私が送受信したメッセージをフェッチしたいということです。私はそれをどのようにすることができますか?カスタムhasMany関係Laravel

答えて

1

次のコードは、トリックを行う必要があります。

public function chats() 
{ 
    return $this->hasMany('App\Chat','sender_id')->union($this->hasMany('App\Chat','receiver_id')); 
} 

これは組合 2のクエリである関係を返します - 特定のユーザーが送信者と指定した別の1であるのチャットメッセージをフェッチ1をユーザーは受信者です。

$ user-> chatsでユーザーのチャットにアクセスできるようになりました。

0

あなたは非常に近くでした。

public function chats() 
{ 
    return $this->hasMany('App\Chat') 
     ->where('sender_id', \Auth::id()) 
     ->orWhere('receiver_id', \Auth::id()); 
} 

これが正しく設定されたら、あなたは現在のユーザーからORに送られたチャットのリストにアクセスするために$users->chatsを使用することができます。hasMany()where()orWhere()呼び出しを連鎖し、私はこのように、そのクエリになるだろう受け入れます。

+0

これはうまくいかないと思います。デフォルトでは、hasManyはchats.user_idをデフォルトの外部キーとして試行して結合します。チャット・レコードにuser_idフィールドがない場合、それは失敗します。 – Brad