Rumah > Soal Jawab > teks badan
Saya mempunyai pertanyaan SQL ini yang melakukan apa yang saya mahu:
1 2 3 4 |
|
Saya cuba menyalinnya sebagai pembina pertanyaan Yii seperti ini:
1 2 3 4 5 6 7 8 9 |
|
Tetapi saya mencetak SQL yang dijana oleh pembina pertanyaan ini menggunakan getRawSql()
dan ia kembali dengan cara yang pelik ini:
1 2 3 4 5 6 7 8 9 10 11 |
|
Maaf jika ini sukar dibaca.
Bolehkah sesiapa membantu saya membuat pembina pertanyaan seperti yang saya mahukan? Saya akan bersyukur
P粉5961919632024-04-02 19:22:21
Setiap kali anda menggunakan andWhere()
或 orWhere()
, pembina pertanyaan mengambil syarat sedia ada dan melakukan sesuatu seperti ini:
atau
Masing-masing.
Jadi jika anda menghadapi situasi yang rumit, cuba hubungi
1 2 |
|
Anda akan dapat
Tetapi dalam kes anda, anda perlu mendapatkan sesuatu seperti:
Untuk mencapai hasil yang serupa, anda boleh membina keadaan kompleks pertama dengan cara yang sama, tetapi syarat kedua mesti dibina dalam satu panggilan orWhere()
. Atau untuk menjadikannya lebih mudah dibaca, anda boleh membina dua keadaan kompleks secara berasingan dalam satu panggilan:
Table1::find()
->joinWith(['table2'])
->where([
'AND',
['Table1.idOwner' => $idOwner, 'Table2.enabled' => 1],
['<=', 'day(Table2.creationDate)', $expirationDay],
['=', "date_format(Table2.creationDate, '%Y-%m')", $previousExpirationMonthYear]
])->orWhere([
'AND',
['Table1.idOwner' => $idOwner, 'Table2.enabled' => 1],
['!=', "date_format(Table2.creationDate, '%Y-%m')", $currentExpirationMonthYear],
['!=', "date_format(Table2.creationDate, '%Y-%m')", $previousExpirationMonthYear]
])->all();