2016-11-03 2 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로 번역 한 :

,691 $request의 속성 중 하나
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

확인을 그것을 처리해야 그것은 :