Yii GridView关联查询列显示(not set)问题求助
解决方案
以下是几个排查和解决方向,按优先级尝试:
在ScientificProduction模型中添加对应属性
Yii的ActiveRecord只会自动映射数据库表的原生字段,你用COALESCE生成的聚合字段属于计算字段,需要手动在模型中声明公共属性:class ScientificProduction extends ActiveRecord { public $Autor; public $Anio; public $Resumen; // ... 其他原有代码 }验证SQL查询的别名与模型属性名完全匹配
确保你在ActiveQuery里的select语句中,聚合字段的别名和模型中声明的属性名大小写、拼写完全一致。比如:$query->select([ 'P_id', 'Titulo', 'COALESCE(libros.autor, cap_libros.autor, articulos.autor) AS Autor', 'COALESCE(libros.anio, cap_libros.anio, articulos.anio) AS Anio', 'COALESCE(libros.resumen, cap_libros.resumen, articulos.resumen) AS Resumen', ]);注意别名
Autor要和模型里的$Autor完全一致(Yii对大小写敏感,除非你配置了属性映射)。检查GridView的列配置
确保GridView中对应列的attribute值和模型属性名一致,比如:<?= GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ 'P_id', 'Autor', 'Anio', 'Titulo', 'Resumen', // ... 其他列 ], ]) ?>不要写错属性名,比如写成
autor(小写)而模型里是$Autor。确认未启用
asArray()模式
如果你的ActiveDataProvider的query调用了asArray(),会返回数组而非模型实例,此时模型中声明的公共属性不会被赋值。检查并移除:// 错误写法:会导致模型属性无法赋值 $dataProvider = new ActiveDataProvider([ 'query' => $query->asArray(), ]);排查是否有字段被过滤或重写
检查模型的afterFind()方法,是否有对这些属性进行重置或修改的逻辑;同时确认scenarios()方法没有排除这些属性的赋值权限。
内容的提问来源于stack exchange,提问作者Emmanuel Guerrero Hernandez
相关产品推荐
相关产品推荐

