我有一个这样的表格:
<?php $form = ActiveForm::begin([
'layout' => 'horizontal'
]); ?>
<?= $form->field($model, 'tanggal_cek')->widget(DatePicker::className(), [
'options' => [
'class' => 'form-control'
]
]) ?>
<?= $form->field($model, 'lokasi')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'created_by')->widget(Select2::className(), [
'data' => $mapDataUser,
'options' => [
'placeholder' => 'Choose .. '
]
]) ?>
现在,我必须操纵来自此表单的结果来查找数据库中的数据。 到目前为止,我已经创建了这样的:
if ($model->load($request->post())) {
$tanggalCek = $model->tanggal_cek ? Yii::$app->formatter->asDate($model->tanggal_cek, "php:Y-m-d") : "";
$lokasi = $model->lokasi;
$created_by = $model->created_by;
$model = StockTakingTli::find()
->where(['tanggal_cek' => $tanggalCek])
->andWhere(['LIKE', 'lokasi', $lokasi])
->andWhere(['created_by' => $created_by])
->all();
你知道,AR按顺序工作。
我的问题是,AR是否可以动态查找?
因为,有时tanggal_cek
为空,设置lokasi
,反之亦然,并且......和...
请告知。
答案 0 :(得分:0)
使用{{3}},它会自动忽略空值:
$query->filterWhere([
'username' => $username,
'email' => $email,
]);
答案 1 :(得分:0)
您可以使用filterWhere()
和andFilterWhere()
函数代替where()
和andWhere()
来构建dinamic查询过滤器...
filterWhere函数忽略具有空值的条件
$model = StockTakingTli::find()
->filterWhere(['tanggal_cek' => $tanggalCek])
->andFilterWhere(['LIKE', 'lokasi', $lokasi])
->andFilterWhere(['created_by' => $created_by])
->all();
http://www.yiiframework.com/doc-2.0/yii-db-querytrait.html#filterWhere()-detail http://www.yiiframework.com/doc-2.0/yii-db-querytrait.html#andFilterWhere()-detail