Laravel Eloquent orWhere Query

牧云@^-^@ 提交于 2019-12-23 08:07:46

问题


Can someone show me how to write this query in Eloquent?

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

I am thinking

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

Also my variables (17 and 19) in this case are coming from a multi select box, so basically in an array. Any clues on how to cycle through that and add these where/orWhere clauses dynamically?

Thanks.


回答1:


You could do in three ways. Assume you've an array in the form

['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp'] which could be a dump of \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();
    



回答2:


The best approach for this case is using Laravel's equivalent for SQL's IN().

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

Will be the same as:

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

This approach is nicer and also more efficient - according to the Mysql Manual, if all values are constants, IN sorts the list and then uses a binary search.




回答3:


In laravel 5 you could do it this way.

$projects = Projects::query();

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

$result = $projects->get();    

This is very useful specially if you have custom methods on your Projects model and you need to query from variable. You cannot pass $selects inside the orWhere method.



来源:https://stackoverflow.com/questions/27632236/laravel-eloquent-orwhere-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!