Laravel Eloquent "DONDE NO ESTÁ EN"

143

Tengo problemas para escribir la consulta laravel eloquent ORM.

mi consulta es

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

Ahora quiero convertir esta consulta en laravel elocuente.

Nur Uddin
fuente

Respuestas:

312

Consultor de construcción:

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

Elocuente:

SomeModel::select(..)->whereNotIn('book_price', [100,200])->get();
Jarek Tkaczyk
fuente
27
selectse puede reemplazar con una matriz en get.
Marwelln
66
¡SO es más rápido que buscar en la documentación oficial!
Fer García
Buena respuesta. Es muy útil para mí.
Yagnesh Bhalala
@ Marwelln, sí, pero no funcionará con consultas complejas. Por ejemplo, con el método addSelect.
Orange-Man
26

Puede usar WhereNotIn de la siguiente manera también:

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

Esto devolverá la colección de registros con campos específicos.

srmilon
fuente
8

Tuve problemas para hacer una subconsulta hasta que agregué el método ->toArray()al resultado, espero que ayude a más de uno, ya que la pasé bien buscando la solución.

Ejemplo

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

La forma dinámica de implementar whereNotIn:

 $users = User::where('status',0)->get();
    foreach ($users as $user) {
                $data[] = $user->id;
            }
    $available = User::orderBy('name', 'DEC')->whereNotIn('id', $data)->get();
Hari Pudyal
fuente
1
Tu ejemplo es demasiado complejo. User::orderBy('name', 'DESC')->where('status', '!=',0)->get()
Adsy2010
3

El método whereNotIn verifica que el valor de la columna dada no está contenido en la matriz dada:

$users = DB::table('users')
                    ->whereNotIn('id', [1, 2, 3])
                    ->get();
مهدی عابدی برنامه نویس و مشاور
fuente
2

Puede usar WhereNotInde la siguiente manera:

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

Puede usar este ejemplo para llamar dinámicamente a Where NOT IN

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

$ otherCompany = User :: whereNotIn ('id', $ user) -> get ();
Baiquni
fuente
0

Puedes hacer lo siguiente.

DB::table('book_mast') 
->selectRaw('book_name,dt_of_pub,pub_lang,no_page,book_price')  
->whereNotIn('book_price',[100,200]);
Khandar Shailesh
fuente
0

Simplemente significa que tiene una matriz de valores y desea registrar, excepto esos valores / registros.

simplemente puede pasar una matriz a whereNotIn () laravel function.

Con el generador de consultas

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

Con elocuente.

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

Esta es mi variante de trabajo para Laravel 7

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