Laravel Eloquent或Where Query

sar*_*arc 9 php where laravel eloquent

有人可以告诉我如何在Eloquent中编写此查询吗?

SELECT * FROM `projects` WHERE `id`='17' OR `id`='19'
Run Code Online (Sandbox Code Playgroud)

我在想

Project::where('id','=','17')
        ->orWhere('id','=','19')
        ->get();
Run Code Online (Sandbox Code Playgroud)

此外,我的变量(17和19)来自多选框,因此基本上是在数组中.关于如何循环并在动态添加/或者哪些子句的任何线索?

谢谢.

Dam*_*rsy 21

你可以用三种方式做.假设你在表单中有一个数组

['myselect' => [11, 15, 17, 19], 'otherfield' => 'test', '_token' => 'jahduwlsbw91ihp'] 这可能是一个转储 \Input::all();

  1.    Project::where(function ($query) {
          foreach(\Input::get('myselect') as $select) {
             $query->orWhere('id', '=', $select);
          }
       })->get();
    
    Run Code Online (Sandbox Code Playgroud)
  2.    Project::whereIn('id', \Input::get('myselect'))->get();
    
    Run Code Online (Sandbox Code Playgroud)
  3.    $sql = \DB::table('projects');
       foreach (\Input::get('myselect') as $select) {
           $sql->orWhere('id', '=', $select);
       }
       $result = $sql->get();
    
    Run Code Online (Sandbox Code Playgroud)


HTM*_*ell 10

对于这种情况,最好的方法是使用Laravel等效的SQL IN().

Project::whereIn('id', [17, 19])->get();
Run Code Online (Sandbox Code Playgroud)

将是相同的:

SELECT * FROM projects WHERE id IN (17, 19)
Run Code Online (Sandbox Code Playgroud)

这种方法更好,也更有效 - 根据Mysql手册,如果所有值都是常量,则IN对列表进行排序,然后使用二进制搜索.