You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yii GridView关联查询列显示(not set)问题求助

解决方案

以下是几个排查和解决方向,按优先级尝试:

  1. 在ScientificProduction模型中添加对应属性
    Yii的ActiveRecord只会自动映射数据库表的原生字段,你用COALESCE生成的聚合字段属于计算字段,需要手动在模型中声明公共属性:

    class ScientificProduction extends ActiveRecord
    {
        public $Autor;
        public $Anio;
        public $Resumen;
        // ... 其他原有代码
    }
    
  2. 验证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对大小写敏感,除非你配置了属性映射)。

  3. 检查GridView的列配置
    确保GridView中对应列的attribute值和模型属性名一致,比如:

    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'columns' => [
            'P_id',
            'Autor',
            'Anio',
            'Titulo',
            'Resumen',
            // ... 其他列
        ],
    ]) ?>
    

    不要写错属性名,比如写成autor(小写)而模型里是$Autor。

  4. 确认未启用asArray()模式
    如果你的ActiveDataProvider的query调用了asArray(),会返回数组而非模型实例,此时模型中声明的公共属性不会被赋值。检查并移除:

    // 错误写法:会导致模型属性无法赋值
    $dataProvider = new ActiveDataProvider([
        'query' => $query->asArray(),
    ]);
    
  5. 排查是否有字段被过滤或重写
    检查模型的afterFind()方法,是否有对这些属性进行重置或修改的逻辑;同时确认scenarios()方法没有排除这些属性的赋值权限。

内容的提问来源于stack exchange,提问作者Emmanuel Guerrero Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:25:00