如何以动态方式创建表单搜索Yii2?

时间:2017-10-01 17:09:22

标签: yii2

我有一个这样的表格:

<?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,反之亦然,并且......和...

请告知。

2 个答案:

答案 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