Красномовний Ларавель "ЧЕ НЕ В"


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);

Тепер я хочу перетворити цей запит у красномовний.

Відповіді:


312

Конструктор запитів:

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

Красномовні:

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

27
selectможна замінити масивом в get.
Марвеллн

6
Так швидше, ніж пошук в офіційній документації!
Fer García

приємна відповідь. це мені дуже допомагає.
Ягнеш бхалала

@Marwelln, так, але це не буде працювати зі складними запитами. Напр. Методом addSelect.
Orange-Man

26

Ви також можете використовувати WhereNotIn також наступним чином:

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

Це поверне колекцію Record із певними полями


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


2

Ви можете використовувати WhereNotInнаступним чином:

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

2

Ви можете використовувати цей приклад для динамічного виклику " Де НЕ"

$ user = Користувач :: де ('company_id', '=', 1) -> select ('id) -> get () -> toArray ();

$ otherCompany = Користувач :: whereNotIn ('id', $ user) -> get ();

0

Ви можете зробити наступне.

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

0

Це просто означає, що у вас є масив значень і ви хочете записувати, крім цих значень / записів.

ви можете просто передати масив у функцію laravel, деNotIn ().

З конструктором запитів

$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();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.