2016-04-27 11 views
0

私は現在、laravelのメッセージングシステムに取り組んでいます。今私は、現在のユーザーがメッセージを送受信するユーザーのリストを取得したい。私は私がメッセージを、利用者1のための結果はとなりますlaravel私が話したすべてのユーザーを取得する方法

id 
2 
3 

モデルに話をした利用者のIDのリストを取得見つける

id | sender_id | receiver_id | msg 
1 | 1   | 2   | smadksamdksa 
2 | 3   | 4   | hi 
3 | 1   | 2   | www 
4 | 2   | 1   | ssse 
5 | 3   | 1   | hi 

のようなメッセージテーブルがあるとし

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class msg extends Model 
{ 
    protected $table = 'msgs'; 

    public function user() 
    { 
     return $this->belongsTo('App\user'); 
    } 
} 

クエリを作成

$senders = msg::select('sender_id')->where('receiver_id', '=', Auth::id())->distinct()->get(); 
$peopleUserTalkedTo = msg::select('receiver_id')->where('sender_id', '=', Auth::id())->distinct()->union($senders)->get(); 

しかし、それはそれと間違って何のエラー

Undefined property: Illuminate\Database\Eloquent\Collection::$bindings 

では動作しません、と私はIDとして送信者IDと受信機を選択することができ、私は後でそれからユーザIDを取得することができますか?

問題は組合方法についてだと思います。

+0

わかりませんが、Auth :: id()は機能しますか? –

+0

@Jerrycあなたのテーブルによれば、ユーザ1はユーザ2としか話していませんでしたが、どのように2&3を得ることができますか? –

+0

@RohitKhatriああ、私の英語のために申し訳ありません、私はユーザーがユーザー1に関連した会話を持っていることを意味します – Jerryc

答えて

4

あなたはこのようなあなたのモデルを定義する必要があります。のIDのみを取得するための

を更新しました

Auth::user()->talkedTo()->get(); 
Auth::user()->relatedTo()->get(); 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class msg extends Model 
{ 
    protected $table = 'msgs'; 

    public function sender() 
    { 
     return $this->belongsTo('App\user','sender_id'); 
    } 

    public function receiver() 
    { 
     return $this->belongsTo('App\user','receiver_id'); 
    }  
} 


namespace App; 

use Illuminate\Database\Eloquent\Model; 

class user extends Model 
{ 
    public function talkedTo() 
    { 
     return $this->hasMany('App\msg','sender_id'); 
    } 

    public function relatedTo() 
    { 
     return $this->hasMany('App\msg','receiver_id'); 
    } 
} 

今、あなたはこれを好きに話を聞いた人々を取得しようあなたが話した人や関連する人のコードに従ってください:

Auth::user()->talkedTo->pluck('id'); 
Auth::user()->relatedTo->pluck('id'); 
+0

@Jerrycそれはあなたのために動作するはずです。 –

+0

ありがとう@Rohit Khatriは、認証ユーザーに関連するすべてのメッセージレコードを取得するコードですが、ユーザーのリストを取得することができます。このメッセージでは、最初にメッセージを送信したり取得したりできます。 – Jerryc

+0

@Jerrycはい、あなたが話したユーザーの一覧を取得できますこの 'Auth :: user() - > talkedTo() - > get();'を使って、 'function talkedTo()'の名前を自由に変更できます。 –

0

のdidntは本当にuが望む結果を得るが、ウルユーザモデル

class user extends Model 
{ 

    public function msgs() 
    { 
     return $this->hasMany('App\msg'); 
    } 
} 

その後、

$mymsgs = Auth::user()->msgs->get(); //collection of all msgs 

をにこれを追加してくださいされた後にこれを試してみて、あなたは、foreachループを使用することができます

+0

私は現在のユーザーがメッセージを送受信するユーザーのリストを持っています。 – Jerryc

関連する問題