2016-06-24 40 views
0

私はこの非常に大きな検索クエリを持っており、ユーザーの検索をブロックした検索からユーザーを削除しようとしています。Laravel 5.2 WhereNotInクエリ

私は本当に混乱していて、向きが変わっていて、助けが大好きです。

BLOCKED_USERSテーブルは

id 
user_id 
blocked_user_id 

ユーザブロック別のユーザの行が作成されているが含まれています。今のところ、ユーザーが検索に表示されていないユーザーをブロックしていない場合(ユーザーがテーブルに存在していない場合は、結合のために推測します)、

ここ

は、私のクエリの短い抜粋です

$query = User::join('user_profiles', 'users.id', '=','user_profiles.user_id'); 
    $query->Join('blocked_users', 'users.id', '=', 'blocked_users.user_id'); 
    $query->whereNotIn('blocked_users.blocked_user_id',[Auth::user()->id])->select('users.*','user_profiles.*'); 

EDIT

[OK]をので、私のユーザーIDが1である、と私は、それ以上、あるいはショーそれらを連絡するために、ユーザ2は、希望しない場合私の検索では、彼らはテーブルに行を追加する私をブロックするだろう

int、user_id = 2、blocked_user_id = 1

もし私が検索したら、ユーザー1の検索でユーザー2が表示されないようにしてください。

leftJoinの場合私をブロックしたユーザーに関係なく、自分のユーザーIDがblocked_user_idの任意の行にある場合、ユーザーは表示されません。

私はどのように視覚的なデータを与えることができるか分からない。クエリ全体が非常に大規模で完全に動作します。私はwhere節をどのように組み合わせるか分かりません。

答えて

1

これはそれを行う可能性があります:

$query = User::join('user_profiles', 'users.id', '=','user_profiles.user_id'); 
     $query->leftJoin('blocked_users', function ($sub_query) { 
     $sub_query->on('users.id', '=', 'blocked_users.user_id'); 
     $sub_query->where('blocked_users.blocked_user_id', '=', Auth::user()->id); 
    }); 
    $query->where('users.id', '!=', Auth::user()->id); 
    $query->whereNull('blocked_users.id'); 
    $query->select('users.*','user_profiles.*'); 
+0

は、エラーのビットを取得し、ありがとうございます。 - BadMethodCallException in Builder.php 2345: 未定義のメソッドを呼び出す\ Database \ Query \ Builder :: id() –

+0

ありがとうございました! –