2015-08-19 11 views

cevap

8

Burada yii\db\Expression kullanarak seçeneklerden biridir: düzeni ve bence daha okunabilir izlediğinden

use yii\db\Expression; 

... 

$models = Customer::find() 
    ->select(['id', 'name', ...]) 
    ->where(new Expression('id % 2 = 1')]) 
    ->all(); 

Bunun definetely ham sql daha iyi ve ['%2=', 'id', 1] bu. %2= aslında örneğin not in veya like gibi bir operatör değildir, bu nedenle operatör, değer ve = işareti tür karıştırılır çünkü

['%2=', 'id', 1]

burada da uygun değildir.

Resmi belgeler:

Güncelleme: Ben samdark, resmi Gitter ana çerçeve ayağı olmuştur sohbet istedi ve dedi bu doğru yolu yii\db\Expression kullanıyor.

+0

Bir İfade nesnesi bir SQL deyimine veya parçasına gömüldüğünde, herhangi bir DB kaçış veya alıntı olmaksızın $ ifade özelliği değeri ile değiştirilir. şimdilik anlamını anlıyorum. – haoliang

+0

ancak nesne (yeni İfade) bir dizide anahtar olamaz. şöyle çalışır: '-> (yeni İfade ('id% 2 = 1'))' – haoliang

+0

Bu yolla, '' (yeni İfade ('id% 2 = 1') ',' 'ile aynı şekilde çalışır ('id% 2 = 1') '. lol – haoliang

4

ActiveQuery sınıfını where() kullanabilirsiniz, $conditions('id % 2 = 1') olacaktır.

+0

Buraya neden "anahtar" gerekiyor? – arogachev

+0

@arogachev gerekli değildir, bu bir örnektir ve kullanıcının '$ conditions' değişkenini kullanmayı tercih etmemesi durumunda sorgulamayı daha kolay hale getirir. Aslında – Zack

+0

'$ terms' değişkenine nadiren ihtiyaç duyulmaktadır. Bunun yerine, '$ query' değişkenine sahip olabilir ve koşullu olarak sorgunun farklı bölümlerini ekleyebilirsiniz. – arogachev

6

Bunu da Etkin Sorguyu kullanarak yapabilirsiniz. Bu yardımcı olabilir.

$customers = Customer::find() 
    ->select(['id', 'name', ...]) 
    ->where('id % 2 = 1') 
    ->all(); 

veya

$customers = Customer::find() 
    ->select(['id', 'name', ...]) 
    ->where(['% 2 =', 'id', 1]) 
    ->all(); 

Reference

.

+0

oh, Yii, ilk elemanı 2 ve 3 arasında bir operatör olarak ele alır. – haoliang

+0

@haoliang Resmi belgelerde [burada] belirtilmiştir (http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where%28%29-detail). – arogachev

+0

Teşekkürler @arogachev Cevabınızı çok yararlı buluyorum. – ankitr