Laravel Eloquent「WHERE NOT IN」


143

でクエリを書き込むのに問題がありますlaravel eloquent ORM

私の質問は

SELECT book_name,dt_of_pub,pub_lang,no_page,book_price  
FROM book_mast        
WHERE book_price NOT IN (100,200);

次に、このクエリをlaravel eloquentに変換します。

回答:


312

クエリビルダー:

DB::table(..)->select(..)->whereNotIn('book_price', [100,200])->get();

雄弁:

SomeModel::select(..)->whereNotIn('book_price', [100,200])->get();

27
selectの配列に置き換えることができますget
Marwelln

6
SOは公式ドキュメントを検索するよりも高速です!
フェルガルシア

いい答え。とても助かります。
Yagnesh bhalala

@Marwellnさん、はい。ただし、複雑なクエリでは機能しません。たとえば、addSelectメソッドを使用します。
Orange-Man

26

WhereNotInは次の方法でも使用できます。

ModelName::whereNotIn('book_price', [100,200])->get(['field_name1','field_name2']);

これは、特定のフィールドを持つレコードのコレクションを返します


7

メソッド->toArray()を結果に追加するまで、サブクエリを作成するのに問題がありました。解決策を探すのに楽しい時間を過ごしたので、それが複数の助けになることを願っています。

DB::table('user')                 
  ->select('id','name')
  ->whereNotIn('id', DB::table('curses')->select('id_user')->where('id_user', '=', $id)->get()->toArray())
  ->get();

4

whereNotInを実装する動的な方法:

 $users = User::where('status',0)->get();
    foreach ($users as $user) {
                $data[] = $user->id;
            }
    $available = User::orderBy('name', 'DEC')->whereNotIn('id', $data)->get();

1
あなたの例は複雑すぎる。User::orderBy('name', 'DESC')->where('status', '!=',0)->get()
Adsy2010 2018


2

WhereNotIn次の方法で使用できます。

$category=DB::table('category')
          ->whereNotIn('category_id',[14 ,15])
          ->get();`enter code here`

2

この例を使用して、Where NOT INを動的に呼び出すことができます。

$ user = User :: where( 'company_id'、 '='、1)-> select( 'id)-> get()-> toArray();

$ otherCompany = User :: whereNotIn( 'id'、$ user)-> get();


0

これは単に、値の配列があり、その値/レコード以外のレコードが必要であることを意味します。

配列をwhereNotIn()laravel関数に渡すだけです。

クエリビルダーを使用

$users = DB::table('applications')
                    ->whereNotIn('id', [1,3,5]) 
                    ->get(); //will return without applications which contain this id's

雄弁。

$result = ModelClassName::select('your_column_name')->whereNotIn('your_column_name', ['satatus1', 'satatus2']); //return without application which contain this status.

0

これは私のLaravel 7のバリアントです

DB::table('user')                 
  ->select('id','name')
  ->whereNotIn('id', DB::table('curses')->where('id_user', $id)->pluck('id_user')->toArray())
  ->get();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.