2016-11-03 27 views
0

我有一個庫功能,通過使用獲取數據:Laravel 5 /鋒 - 處理數組參數中的動態凡方法輸入

public function get($request){ 

    return User::where($request)->get();  

} 

其中$request陣列是動態的。只要和我通過正規的鍵值對上述工作:以上

$request = array(
    'name' => 'mike', 
    'age' => 45 
); 

轉換到這個SQL:

SELECT * 
FROM users 
WHERE name = 'mike' AND age = 45; 

在每隔一段時間,我想在一個數組來傳遞作爲$request的屬性之一:

$request = array(
    'name' => 'mike', 
    'age' => array(45, 46) 
) 

,並把它翻譯成以下SQL:

SELECT * 
FROM users 
WHERE name = 'mike' AND age IN(45, 46); 

$request中設置爲數組的任何屬性應視爲where in語句,而不是香草where語句。

我該怎麼做?

回答

1

這應該處理好聽......

public function get($request) 
{ 
    $query = User::query(); 
    foreach ($request as $key => $value) { 
     if (is_array($value)) { 
      $query->whereIn($key, $value); 
     } else { 
      $query->where($key, $value); 
     } 
    } 

    return $query->get(); 
} 
+0

'newQuery()'不是一個靜態方法。無論如何做到這一點,而不實例化我的模型的新實例? –

+0

只需使用query()而不是newQuery()。 –

+0

對不起,我剛剛更新了答案。 – user3158900

0

您需要使用其中的語句,是這樣的:

User::where(['name' => 'jhon'])->whereIn(['age' => [45, 46])->get(); 
0

退房的when()方法https://laravel.com/docs/master/queries#conditional-clauses

你的情況它將是:

public function get($request) 
{ 
    $query = User::newQuery(); 

    foreach ($request as $key => $value) { 
     $query->when(is_array($value), function($query) 
     { 
      return $query->whereIn($key, $value); 
     }, function($query) use($key, $value) 
     { 
      return $query->where($key, $value); 
     }); 
    } 

    return $query->get(); 
}