2017-09-13 2 views
0

私は果物のデータベースを持っている、と私はそれからすべての赤い果実をしたいと言うことができますに基づいてエントリを削除し、その後、2つのテーブルをマージ:私も、ユーザのテーブルを持っているLaravel - どこクエリ

$allfruit = DB::table('fruits')->Where("color","=","red")->paginate(10); 

最も好きな果実。ユーザーは、私はすべての彼らの嫌わ果物のリストを取得して自分のIDを渡すためにしようとしているにログインしている場合:

$leastfav = DB::table('dislikes')->Where("userID","=",Auth::user()->id)->get(); 

今私が何をしたいのですがどのように表示され$allfruitからすべてのエントリを削除していますそのユーザーのIDを持つ「嫌い」テーブルそれは場合に役立ちます

$allfruit = DB::table('fruits')->Where("color","=","red")->merge($leastfav)->where(fruits.ID,"!=", "dislikes.fruitID")->paginate(10); 

私のDBはSQLiteのである:私が試した何

のようなものです。おかげ

+0

Laravelのどのバージョンをお使いですか? –

答えて

1

あなたはwhereNotExistswhereExists()の逆数)を使用することができます

また
$allfruitQuery = DB::table('fruits')->where('color', 'red'); 

if (auth()->check()) { 
    $allfruitQuery->whereNotExists(function ($query) { 
     $query->select(DB::raw(1)) 
      ->from('dislikes') 
      ->where('userID', auth()->id()) 
      ->whereRaw('fruits.ID = dislikes.fruitID'); 
    }); 
} 

$allfuit = $allfruitQuery->paginate(10); 

、(あなたは5.2+を使用している場合)あなたがwhen()を使用することができます。

$allfuit = DB::table('fruits')->where('color', 'red') 
    ->when(auth()->check(), function ($query) { 
     $query->whereNotExists(function ($query) { 
      $query->select(DB::raw(1)) 
       ->from('dislikes') 
       ->where('userID', auth()->id()) 
       ->whereRaw('fruits.ID = dislikes.fruitID'); 
     }); 
    }) 
    ->paginate(10); 

は、この情報がお役に立てば幸い!

+0

パーフェクト!魅力のように動作します、ありがとうございます:) – Hook