Может кто-нибудь показать мне, как написать этот запрос в Eloquent?
SELECT * FROM `projects` WHERE `id`='17' OR `id`='19'
я думаю
Project::where('id','=','17')
->orWhere('id','=','19')
->get();
Также мои переменные (17 и 19) в этом случае поступают из поля множественного выбора, то есть в основном в массиве. Любые подсказки о том, как циклически проходить через это и добавлять их, где / или где предложения динамически?
Благодарю.
Вы могли бы сделать тремя способами. Предположим, у вас есть массив в виде
['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp']
которая может быть свалкой \Input::all();
Project::where(function ($query) {
foreach(\Input::get('myselect') as $select) {
$query->orWhere('id', '=', $select);
}
})->get();
Project::whereIn('id', \Input::get('myselect'))->get();
$sql = \DB::table('projects');
foreach (\Input::get('myselect') as $select) {
$sql->orWhere('id', '=', $select);
}
$result = $sql->get();
Наилучший подход для этого случая — использовать эквивалент Laravel для SQL. IN()
,
Project::whereIn('id', [17, 19])->get();
Будет так же, как:
SELECT * FROM projects WHERE id IN (17, 19)
Этот подход приятнее и эффективнее — в соответствии с Mysql Руководство, если все значения являются константами, IN
сортирует список, а затем использует бинарный поиск.
В 5 уровне вы можете сделать это таким образом.
$projects = Projects::query();
foreach ($selects as $select) {
$projects->orWhere('id', '=', $select);
}
$result = $projects->get();
Это очень полезно, особенно если у вас есть пользовательские методы в вашей модели Projects, и вам нужно запросить из переменной. Ты не пройдешь $selects
внутри метода orWhere.