Yii 按';这是外键
使用Yii2 我有一个名为“calificacion”的表,它有一个外键“alumno id”,指向表alumno中的字段id GridView小部件中定义的列为:Yii 按';这是外键,yii,yii2,yii2-advanced-app,Yii,Yii2,Yii2 Advanced App,使用Yii2 我有一个名为“calificacion”的表,它有一个外键“alumno id”,指向表alumno中的字段id GridView小部件中定义的列为: [ 'header' => 'Alumno', 'attribute' => 'alumno.id', 'value' => 'alumno.name' ], 它显示得很完美,但是列标题中的过滤器没有出现。我想
[
'header' => 'Alumno',
'attribute' => 'alumno.id',
'value' => 'alumno.name'
],
它显示得很完美,但是列标题中的过滤器没有出现。我想有一个文本框,用来写校友的名字,然后过滤掉。我怎样才能做到这一点
编辑:以下是文件您必须首先在该表“calificacion”的模型中定义一个关系,如
public function getAlumno()
{
return $this->hasOne(Alumno::className(), ['id' => 'alumno_id']);
}
在Calificacion的搜索模型中,您在验证后加入表,如
$query->joinWith('alumno')
而不是像搜索一样设置
$query->andFilterWhere([
'alumno.id' => $this.alumno_id
]);
首先在
SearchModel
中声明一个属性
public $alumno_name;
在搜索模型的规则中添加:
[['alumno_name'], 'safe'],
在搜索方法中加入alumno
关系(支持您的Calificacion
模型中存在alumno
关系):
要使用$alumno\u name
进行排序,请添加:
$dataProvider->sort = [
'attributes' => [
//Other attributes here
'alumno_name' => [
'asc' => ['alumno.name' => SORT_ASC],
'desc' => ['alumno.name' => SORT_DESC],
],
]
];
要对此进行筛选,您必须添加:
$query->andFilterWhere(['like', 'alumno.name', $this->alumno_name]);
最后,在网格视图中添加:
[
'attribute' => 'alumno_name',
'value' => 'alumno.name'
],
您可以找到更多信息和
另外,不要使用
标题
而使用'label'=>'Alumno'
您不需要添加假属性:哦,很好。我没有注意到。谢谢这样做,可以看到索引表上的字段,但无法搜索!我用这些文件编辑了这篇文章。你不需要public$alumno\u id
。它已经在加州类中定义。另外,您正在尝试通过校友id
搜索验证规则中的验证为整数。请重试我在回答中使用的方法。它应该会起作用。只需添加public$alumno\u name
,将虚拟属性添加为规则中的安全属性(非整数),将排序属性alumno\u id
更改为alumno\u name
,并使用$this->alumno\u name
而不是$this->alumno\u id
进行过滤。最后,在网格视图中将alumno\u id
替换为alumno\u name
。这样做,可以看到索引表上的字段,但无法搜索!我用这些文件编辑了这篇文章。
[
'attribute' => 'alumno_name',
'value' => 'alumno.name'
],