2014-12-24 24 views
5

Qualcuno può mostrarmi come scrivere questa query in Eloquent?Laravel Eloquent oWhere Query

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

Sto pensando

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

Anche le mie variabili (17 e 19), in questo caso sono provenienti da una scatola a più di selezione, in modo sostanzialmente in un array. Qualche indizio su come farlo circolare e aggiungere queste clausole where/orWhere in modo dinamico?

Grazie.

risposta

13

Si potrebbe fare in tre modi. Si supponga che hai una matrice in forma

['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp'] che potrebbe essere una discarica di \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 5 si potesse fare questo modo.

$projects = Projects::query(); 

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

$result = $projects->get();  

Questo è molto utile specialmente se si dispone di metodi personalizzati per il proprio modello di progetto ed è necessario eseguire una query dalla variabile. Non è possibile passare $selects all'interno del metodo oWhere.

9

L'approccio migliore per questo caso è l'utilizzo dell'equivalente di Laravel per SQL IN().

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

sarà lo stesso come:

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

Questo approccio è più bello e anche più efficiente - secondo l'Mysql Manual, se tutti i valori sono costanti, IN ordina l'elenco e poi utilizza una ricerca binaria .

Problemi correlati