Quelqu'un peut-il me montrer comment écrire cette requête dans Eloquent?
SELECT * FROM `projects` WHERE `id`='17' OR `id`='19'
Je suis en train de penser
Project::where('id','=','17')
->orWhere('id','=','19')
->get();
De plus, mes variables (17 et 19) dans ce cas proviennent d'une zone de sélection multiple, donc fondamentalement d'un tableau. Des indices sur la façon de parcourir cela et d’ajouter dynamiquement ces clauses where/orWhere?
Merci.
Vous pouvez le faire de trois manières. Supposons que vous ayez un tableau sous la forme
['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp']
qui pourrait être un dump de \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();
La meilleure approche pour ce cas utilise l’équivalent de Laravel pour la fonction IN()
de SQL.
Project::whereIn('id', [17, 19])->get();
Sera le même que:
SELECT * FROM projects WHERE id IN (17, 19)
Cette approche est plus agréable et plus efficace - selon le Mysql Manual , si toutes les valeurs sont des constantes, IN
trie la liste puis utilise une recherche binaire.
Dans laravel 5, vous pouvez le faire de cette façon.
$projects = Projects::query();
foreach ($selects as $select) {
$projects->orWhere('id', '=', $select);
}
$result = $projects->get();
Ceci est très utile spécialement si vous avez des méthodes personnalisées sur votre modèle Projects et que vous devez interroger à partir de variable. Vous ne pouvez pas transmettre $selects
dans la méthode orWhere.