2017-09-27 79 views
1

我有條件where子句的yii2查詢。這是我的查詢:Yii2 - 如果變量爲空,則忽略where子句

$query = new Query(); 

$query->select 
    (['pengeluaran.id']) 
    ->from('surat_jalan, pengeluaran') 
    ->where('surat_jalan.no_bus=:no_bus',['no_bus'=>$no_bus]) 

    //this is my conditional query 
    ->andWhere(['between', 'pengeluaran.tgl_pengeluaran', $awal, $akhir]) 
    ->andWhere('pengeluaran.nama_toko=:nama_toko',['nama_toko'=>$nama_toko]) 
    ->andWhere('pengeluaran.metode_pembayaran=:metode_pembayaran',['metode_pembayaran'=>$metode_pembayaran]) 
    ->andWhere('pengeluaran.waktu_pembayaran=:waktu_pembayaran',['waktu_pembayaran'=>$waktu_pembayaran]) 
    //this is my conditional query 

    ->andWhere('surat_jalan.id_surat_jalan=pengeluaran.id_surat_jalan'); 

$command = $query->createCommand(); 
$data_id_pengeluaran = $command->queryAll(); 

我從別人讀了一些問題,我發現了什麼是MySQL表中的字段:

->andWhere(['not', ['activated_at' => null]]); 

什麼,我要的是如果變量是空的,有條件的地方()條款是無視的。 yii2有可能嗎?

回答

2

filterWhere是實現您的目標的完美工具。

例如,

// This will not appear in the finally statement if $val is empty. 
$query->andFilterWhere(['activated_at' => $val]) 

注意:值被認爲是空的,如果它是零,空數組,空字符串或僅由空格的字符串。

+0

它適用於common where子句,也適用於where子句。非常感謝。 – biladina

+0

@biladina不客氣。 :) – paul