Şüphesiz, ben Yii::$app->db->createCommand($sql)->query()
, yapabilirim ama bu işi yapmak için ActiveRecord::find()->where($conditions)
kullanmak istiyorsam ne yapabilirim?'sormak' gibi soruyu nasıl oluşturabilirim? Yii 2 kullanarak kimliği% 2 = 1 'nerede?
cevap
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]
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.
ActiveQuery sınıfını where() kullanabilirsiniz, $conditions
('id % 2 = 1')
olacaktır.
Buraya neden "anahtar" gerekiyor? – arogachev
@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
'$ 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
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();
.
oh, Yii, ilk elemanı 2 ve 3 arasında bir operatör olarak ele alır. – haoliang
@haoliang Resmi belgelerde [burada] belirtilmiştir (http://www.yiiframework.com/doc-2.0/yii-db-queryinterface.html#where%28%29-detail). – arogachev
Teşekkürler @arogachev Cevabınızı çok yararlı buluyorum. – ankitr
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
ancak nesne (yeni İfade) bir dizide anahtar olamaz. şöyle çalışır: '-> (yeni İfade ('id% 2 = 1'))' – haoliang
Bu yolla, '' (yeni İfade ('id% 2 = 1') ',' 'ile aynı şekilde çalışır ('id% 2 = 1') '. lol – haoliang