Laravel Eloquent或Where Query

时间:2014-12-24 06:00:53

标签: php laravel eloquent where

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

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

我在想

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

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

感谢。

4 个答案:

答案 0 :(得分:19)

你可以用三种方式做。假设你有一个

形式的数组

['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();
    
  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 :(得分:9)

此案例的最佳方法是使用Laravel等效的SQL IN()

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

将与:

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

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

答案 2 :(得分:3)

在laravel 5中你可以这样做。

$projects = Projects::query();

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

$result = $projects->get();    

如果您在Projects模型上有自定义方法并且需要从变量查询,这非常有用。您无法在orWhere方法中传递$selects

答案 3 :(得分:1)

public function getSearchProducts($searchInput)
    {
        $products = Cache::rememberForever('getSearchProductsWithDiscountCalculationproducts',  function () {
            return DB::table('products_view')->get();
        });

        $searchProducts = $products->filter(function ($item) use($searchInput)  {
            return preg_match('/'.$searchInput.'/i', $item->productName) || preg_match('/'.$searchInput.'/i', $item->searchTags) ;
        });

         $response = ["status" => "Success", "data" => $searchProducts ];
        return response(json_encode($response), 200, ["Content-Type" => "application/json"]);
    }

在任何自定义情况下使用过滤器功能。