2016-11-03 7 views
0

私が使用してデータを取得し、リポジトリの機能を有する場合、動的に配列パラメータを処理します。私は通常のキーと値のペアを渡すよう上記の作品だけでなく、長い:Laravel 5 /雄弁メソッド入力

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

上記は、このSQLに変換します。

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

たまにすべて、私は配列で渡ししたいと思います

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

と、それは、次のSQLに変換している:

のプロパティの一つとして、
SELECT * 
FROM users 
WHERE name = 'mike' AND age IN(45, 46); 

$requestに配列として設定されたプロパティは、whereステートメントではなくwhere inステートメントとして処理する必要があります。

どうすればよいですか?

答えて

1

これはあなたのケースでは...うまくwhen()方法https://laravel.com/docs/master/queries#conditional-clauses

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

newQuery()の代わりにquery()を使用するだけです。 –

+0

申し訳ありませんが、私はちょうど答えを更新しました。 – user3158900

0

あなたはここでステートメントを使用する必要があり、何かのように:

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

チェックをそれを処理する必要がありますそれはでしょう: