您好我有一个yii代码,我可以在其中显示模型中的数据,但搜索栏没有在gridview中显示,请帮忙。
Gridview代码:
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
// 'emp_attendance_pid',
[
'label' => 'Employee ID',
'attribute' => 'emp_history_id',
'value' => 'emp_history_id',
],
[
'label' => Yii::t('app','First Name'),
// 'attribute' => 'emp_history_id',
'value' => 'empHistory.emp_first_name',
'filter' => ArrayHelper::map(app\modules\employee\models\EmpInfo::find()->all(), 'emp_info_id', 'emp_first_name')
],
[
'label' => Yii::t('app','Last Name'),
// 'attribute' => 'emp_history_id',
'value' => 'empHistory.emp_last_name',
'filter' => ArrayHelper::map(app\modules\employee\models\EmpInfo::find()->all(), 'emp_info_id', 'emp_last_name')
],
在这里你可以看到过滤器,因为我能够使用arrayhelper获取数据,但我需要获取我在搜索框中提供的数据,搜索框也没有到来,只有下拉才会出现
答案 0 :(得分:1)
过滤需要参数属性。
如果您定义过滤器属性,则会有一个下拉列表。 据我所知,你想要输入文字,因此你不需要过滤。
如果要通过相关表进行搜索,则应在SearchModel中创建公共属性并创建验证规则。正如我从您的示例中看到的,您想要从相关表中过滤数据;
这是一个小例子:
设置搜索模型
public $emp_first_name;
public function rules()
{
return [
[['emp_first_name'], 'safe']
];
}
public function search($params)
{
$query = Person::find()->joinWith(['empHistory'])->groupBy(Person::tableName().'.id');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}
$query->andFilterWhere(['like', EmpInfo::tableName().'.emp_first_name', $this->emp_first_name]);
return $dataProvider;
}
在视图中
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'emp_history_id',
[
'attribute' => 'emp_first_name',
'value' => 'empHistory.emp_first_name',
],
['class' => 'yii\grid\ActionColumn'],
]
]); ?>