Laravel Eloquent или Где запрос

Может кто-нибудь показать мне, как написать этот запрос в Eloquent?

SELECT * FROM `projects` WHERE `id`='17' OR `id`='19'

я думаю

Project::where('id','=','17')
->orWhere('id','=','19')
->get();

Также мои переменные (17 и 19) в этом случае поступают из поля множественного выбора, то есть в основном в массиве. Любые подсказки о том, как циклически проходить через это и добавлять их, где / или где предложения динамически?

Благодарю.

8

Решение

Вы могли бы сделать тремя способами. Предположим, у вас есть массив в виде

['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp'] которая может быть свалкой \Input::all();

  1.    Project::where(function ($query) {
    foreach(\Input::get('myselect') as $select) {
    $query->orWhere('id', '=', $select);
    }
    })->get();
    
  2.    Project::whereIn('id', \Input::get('myselect'))->get();
    
  3.    $sql = \DB::table('projects');
    foreach (\Input::get('myselect') as $select) {
    $sql->orWhere('id', '=', $select);
    }
    $result = $sql->get();
    
17

Другие решения

Наилучший подход для этого случая — использовать эквивалент Laravel для SQL. IN(),

Project::whereIn('id', [17, 19])->get();

Будет так же, как:

SELECT * FROM projects WHERE id IN (17, 19)

Этот подход приятнее и эффективнее — в соответствии с Mysql Руководство, если все значения являются константами, IN сортирует список, а затем использует бинарный поиск.

9

В 5 уровне вы можете сделать это таким образом.

$projects = Projects::query();

foreach ($selects as $select) {
$projects->orWhere('id', '=', $select);
}

$result = $projects->get();

Это очень полезно, особенно если у вас есть пользовательские методы в вашей модели Projects, и вам нужно запросить из переменной. Ты не пройдешь $selects внутри метода orWhere.

3
По вопросам рекламы [email protected]