Laravel Eloquent orWhere Query

后端 未结 4 1554
悲哀的现实
悲哀的现实 2021-01-17 18:05

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

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

I am thinking

         


        
相关标签:
4条回答
  • 2021-01-17 18:38

    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.

    0 讨论(0)
  • 2021-01-17 18:42

    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.

    0 讨论(0)
  • 2021-01-17 18:49
    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"]);
        }
    

    use filter functionality for any customize situations.

    0 讨论(0)
  • 2021-01-17 18:50

    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();
      
    0 讨论(0)
提交回复
热议问题