2017-01-20 1 views
0

나는 Yii2 프레임 워크로 API를 만들었습니다. 그러나 내 성명에서 OR 조건을 사용하는 방법을 모르겠습니다.Yii2 쿼리 또는 조건 1 열의 복수 값

예 : BMW 또는 DODGE 브랜드의 차량을 모두 소유하겠습니다.

나는 다음 시도했다 :

$query = Car::getCar($lang) 
     ->where(['or', ['m.brand' => 'BMW'], ['m.brand' => 'DODGE']]) 
     ->all(); 

하지만이 작동하지 않습니다. m.brand에 대해 하나의 값으로 만 작동합니다.

그래서 :

$query = Car::getCar($lang) 
     ->where(['m.brand' => 'BMW']) 
     ->all(); 

작품 잘.

몇 가지 다른 방법을 시도했지만이 기능이 작동하지 않습니다.
누구든지 내가 뭘 잘못하고 있는지 알아?

편집 는 getCar 방법은 반환 뭔가 같은 :

$query->andWhere(['or', ['m.brand' => 'BMW'], ['m.brand' => 'DODGE']]) 
+0

정적 메소드'getCar()'가'ActiveQuery' 인스턴스를 반환하는 한 작동합니다. – Bizley

+0

@Bizley getCar이 반환하는 것을 추가했습니다. 나는 그게 문제라고 생각하지 않는다. 왜냐하면 단 하나의 열에 대한 매개 변수가 잘 작동하기 때문이다. –

+0

이것은 이상하다. 작동해야한다. "나는이 일을하지 못한다"는 것은 무엇을 의미합니까? 오류가 있습니까 아니면 예상 결과가 보이지 않습니까? '-> all();을'-> createCommand() -> rawSql;로 바꾸고 출력을 검사하여이 버전을'또는'로 테스트하십시오. – Bizley

답변

2

것은 내가 당신을 잘 이해한다면, 당신이 뭔가를 사용할 수 있습니다 2와 함께 작동하도록 알았어요

(new Query())->select(['a.auto_id'])->from('auto_new a') 

편집 이렇게 :

Model::find()->orWhere(['brand' => 'brand1]) 
      ->orWhere(['id' => 'brand2'])->all(); 
+0

where를 orWhere로 바꾸었지만 여전히 BMW 만 반환합니다. –

1

where()는 다음 ActiveQuery를 사용 후 반환하고자하는 브랜드의 배열을 생성 할 수있는이 구조를 사용하여

SELECT * FROM car WHERE brand in ('brand1', 'brand2'); 

의 라인을 따라 SQL을 생성하는 배열을 취할 수 있습니다.

$brands = ['BMW', 'DODGE']; 
$query = Car::find()->where(['brand' => $brands])->all(); 
1

당신은 실제로 당신이 필요로하는 값으로 배열을 사용하여 많은 단순화 할 수 있습니다 : 이것은 당신이 찾고있는 결과를 반환 WHERE m.brand IN ('BMW', 'DODGE') 같은 뭔가를 실행합니다

$query = Car::getCar($lang) 
    ->where(['m.brand' => ['BMW', 'DODGE']]) 
    ->all(); 

.