2014-12-24 22 views
5

Kann mir jemand zeigen, wie diese Abfrage in Eloquent schreiben?Laravel Eloquent oder wo Abfrage

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

Ich denke

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

Auch meine Variablen (17 und 19) in diesem Fall kommt aus einem Multi Select-Box, so dass im Grunde in einem Array. Irgendwelche Hinweise darauf, wie man das durchläuft und diese where/or Where-Klauseln dynamisch hinzufügt?

Danke.

Antwort

13

Sie könnten auf drei Arten tun. Es sei angenommen, haben Sie ein Array in Form

['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp'] die 5 a dump von \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(); 
    
1

In Laravel könnte man es dies tun könnte Weg.

$projects = Projects::query(); 

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

$result = $projects->get();  

Dies ist besonders nützlich, wenn Sie benutzerdefinierte Methoden in Ihrem Projects-Modell haben und Abfragen von Variablen benötigen. Sie können $selects nicht innerhalb der OrWhere-Methode übergeben.

9

Der beste Ansatz für diesen Fall ist die Verwendung von Laravels Äquivalent für SQL IN().

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

Wird das gleiche wie:

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

Dieser Ansatz ist schöner und auch effizienter - nach dem Mysql Manual, wenn alle Werte Konstanten sind, IN sortiert die Liste und dann eine binäre Suche verwendet .