Yii2 从另一个表在Gii表单中添加字段

Yii2 从另一个表在Gii表单中添加字段,yii2,yii2-advanced-app,Yii2,Yii2 Advanced App,我有一个名为child(id,name,sport_id)的表,一个名为sports(id,name)的表,一个名为parent(id,name)的表和一个名为child_parent(id,child_id,parent_id)的表 我用Gii创建了crud,并修改了child_parent,使其不显示子项和父项的id,而是显示名称,还创建了一个下拉列表用于搜索和创建表单。但有一件事我不能做,那就是在索引中增加一个名为“Sport”的列,这样我就可以按Sport筛选孩子/家长。我该怎么做 不需

我有一个名为child(id,name,sport_id)的表,一个名为sports(id,name)的表,一个名为parent(id,name)的表和一个名为child_parent(id,child_id,parent_id)的表


我用Gii创建了crud,并修改了child_parent,使其不显示子项和父项的id,而是显示名称,还创建了一个下拉列表用于搜索和创建表单。但有一件事我不能做,那就是在索引中增加一个名为“Sport”的列,这样我就可以按Sport筛选孩子/家长。我该怎么做

不需要连接表,可以使用自引用关系

  • 节点(id、父节点id、运动节点id、名称)
  • 运动(身份证、姓名)
父\u id默认为NULL(根)。如果需要,您可以为字段添加规则或条件可见性,强制子字段与父字段具有相同的sport_id(除非其为根)

现在,您可以轻松地启用按运动进行过滤

[
    'attribute' => 'sport_id',
    'filter' => Html::activeDropDownList(
        $searchModel, 
        'sport_id',
        ArrayHelper::map(Sport::find()->all(),'id','name'),
        ['prompt' => '']
    ),
    'value' => function($model) {
        return $model->sport->name;
    }
],

你在这个索引上使用的是什么模型<代码>子项\父项?完全正确。我使用的是child\u父模型ActiveRecord,在这里可能不会对您有多大好处。您最好使用yii\db\Query和yii\data\SqlDataProvider,并在child\u parent和child之间使用join(),然后自己处理筛选。