具有不同型号的 Yii2 搜索过滤器下拉列表

Yii2 Search filter dropdown with different models

我刚刚在我的应用程序中使用了 Yii2。我想在索引视图中创建搜索过滤器表单,其中包含来自不同模型的属性,用于过滤器处于活动状态和非活动状态。

我有两个表 "Employee" 和 "Contract"..

tbl_employee
id_employee
姓名
多布
地址
等等

tbl_contract
编号
日期
状态

在索引中我使用了这段代码

<?php echo $this->render('_search', ['model' => $searchModel]); ?>

我想在索引视图中过滤有有效合同和没有有效合同的员工

这个_search.php

<?php $form = ActiveForm::begin([
    'action' => ['index'],
    'method' => 'get',
]); ?>

<?= $form->field($model, 'id_number')->textInput(['maxlength'=>6,'style'=>'width:225px']) ?>

<?= $form->field($model, 'name') ->textInput(['maxlength'=>30,'style'=>'width:225px']) ?>              

<?php $data = ['Active'=> 'Active', 'Inactive'=>'Inactive'];

echo '<label class="control-label">Status</label>';
echo Select2::widget([
'name' => 'Status_Contract',
'data' => $data,
'options' => [
    'placeholder' => 'Select Status Contract ...',
    ],
]);
?>

<div class="form-group">
    <?= Html::submitButton(Yii::t('app', 'Search'), ['class' => 'btn btn-success']) ?>
    <?= Html::a('Reset', ['/employee/index'], ['class'=>'btn btn-default']) ?>
</div>
<?php ActiveForm::end(); ?>

Models\employee EmpSearch.php

$query = Employee::find()->joinWith('p_contract');

$dataProvider = new ActiveDataProvider([
        'query' => $query,

if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }
    ]);
$query->andFilterWhere([
'id' => $this->id,
]);

$query->andFilterWhere(['like', 'name', $this->name]);

我网站上的这个搜索表单

属性 "status" 位于合同模型中。这样的关系。

public function getP_contract()
{
    return $this->hasOne(Contract::className(), ['id_emp' => 'id_employee', 'id' => 'id_contract']);
}

那么,我如何根据合同 "active" 或 "Inactive" 创建搜索表单。 请帮我解决这个问题。

您似乎已经在模型中建立了获取状态的正确关系,因此您应该为新的字段搜索状态添加一个属性

/* your related attribute */
public $status;

并且您已经为 p_contract 加入了一个 joinwith,因此您应该在状态

的位置添加过滤器
 // filter by status
   $query->joinWith(['p_contract' => function ($q) {
       $q->where('contratct_table_name.status LIKE "%' . $this->status. '%"');
}]);

您可以查看本教程以获取更多信息http://www.yiiframework.com/wiki/621/filter-sort-by-calculated-related-fields-in-gridview-yii-2-0/(参见场景 2)