我刚刚在我的应用中使用了Yii2。我想在索引视图中创建搜索过滤器表单,其中包含来自不同模型的属性,用于过滤器活动且不活动。
我有两张表“员工”和“合同”。
tbl_employee
id_employee
命名
DOB
解决
等
tbl_contract
ID
日期
状态
我使用了这段代码
<?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]);
我的网页中的搜索表单
位于合同模型中的属性“状态”。像这样的关系。
public function getP_contract()
{
return $this->hasOne(Contract::className(), ['id_emp' => 'id_employee', 'id' => 'id_contract']);
}
那么,我如何根据合约“active”或“Inactive”创建搜索表单。 请帮我解决这个问题。
答案 0 :(得分:1)
似乎您已经在模型中获得了适当的get状态关系,因此您应该为新的字段搜索状态添加属性
/* 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)