2017-01-24 2 views
1

友達のすべてのユーザーオブジェクトを選択しようとしています。友人は、保存された友情の最初のユーザーまたは2番目のユーザーのいずれかになります。 Eloquentを使用してこれを行うにはどうすればよいですか?ここでLaravel Eloquent:友人のユーザーモデルを選択するにはどうすればいいですか?

は、私が試したものです:

$friends = Friend::select(array('users.id', 'users.name')) 
->leftJoin('users', function($join) 
    { 
     $join->on('user_id_1', '=', 'users.id'); 
     // $join->on('user_id_2', '=', 'users.id'); 
    }) 
->where(['user_id_1' => $myID, 'accepted' => '1']) 
->orWhere(['user_id_2' => $myID, 'accepted' => '1'])->get();" 

任意のアイデア?

編集

私はorOnを使用するオプションを発見しました。しかし、私はまだ選択されたユーザーがあなたではないことを確認する必要があります。

データベース構造

users 
----- 
id (int) 
name (varchar) 

friends 
----- 
id (int) 
user_1 (int) 
user_2 (int) 
accepted (int) 
+0

データベース構造を投稿するので、私たちはここで何が起こっているかを知ってください。 – Jerodev

+0

私の質問が更新されました – Z0q

+0

だから、あなたは '$ myID'というIDを持つユーザーと友人であるすべてのユーザーオブジェクトを取得したいのですか? 'User'モデルで関係を定義しましたか? Laravelはほとんどのクエリを処理できます – Jerodev

答えて

2

あなたがUserオブジェクトのリストを受信したいので、あなたはあなたのFriendモデルのUserずに問い合わせる必要があります。次に、別のwhere句を追加するだけで、user_idが変数と一致する行を取得しないようにすることができます。

だから、結果はこのようなものになるだろう:

User::leftJoin('friends', function ($join) { 
    $join->on('friends.user_id_1', '=', 'users.id') 
     ->orOn('friends.user_id_2', '=', 'users.id'); 
}) 
->where(function ($query) use ($myID) { 
    // Group orwhere functions so the query builder knows these belong together 
    $query->where([ 
     'friends.user_id_1' => $myID, 
     'friends.accepted' => true 
    ]) 
    ->orWhere([ 
     'friends.user_id_2' => $myID, 
     'friends.accepted' => true 
    ]); 
}) 
->where('users.id', '!=', $myID) // Exclude the user with id $myID 
->get(); 
関連する問題