0

这让我发疯了。我阅读了许多回复和教程,但我无法在这里指出问题所在。

我有 2 个表:tblEmpleadotblProfesion 这是他们拥有的 MySQL 关系的图像(标记为红色)

当显示来自tblEmpleado的数据时,我想在表tblProfesionCGridView的属性“描述”上显示。

我尝试使用 claveProfesion.descripcion 无济于事(它显示 FK 的 INT 编号很好,没有“.descripcion”部分)。还尝试使用类似的东西:

数组('header'=>'tableHeaderName', 'value'=>'(isset($data->claveProfesion)) ? $data->claveProfesion->descripcion : null', )

得到“试图获得非对象的属性”。

这是模型代码的 Empleados.php 关系部分:

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'tblcelulars' => array(self::HAS_MANY, 'Tblcelular', 'claveEmpleado'),
        'tblcuentabancos' => array(self::HAS_MANY, 'Tblcuentabanco', 'claveEmpleado'),
        'idCentroTrabajo' => array(self::BELONGS_TO, 'Tblcentrotrabajo', 'idCentroTrabajo'),
        'convenio' => array(self::BELONGS_TO, 'Tblconvenio', 'convenio'),
        'claveProfesion' => array(self::BELONGS_TO, 'Tblprofesion', 'claveProfesion'),
    );
}

以及 Admin.php 查看代码的 CGridView 部分

    <?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'empleados-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'claveEmpleado',
        'nombreEmpleado',
        'idCentroTrabajo',
        array(
                'header'=>'tableHeaderName',
                'value'=>'($data->claveProfesion!=null) ? $data->claveProfesion->descripcion : null',
        ),
        'aniosExperiencia',
        'telefono2',
        'email',
...
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

最后,我不知道它是否相关,但在 Model 类"Profesiones.php"中,关系如下:

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
        'tblempleados' => array(self::HAS_MANY, 'Tblempleado', 'claveProfesion'),
    );
}

谁能帮我解决这个问题?

4

1 回答 1

3

您的列和您的关系都具有相同的名称claveProfesion。因此,当您调用时,Yii 会返回列而不是关系claveProfesion。要解决它,将您的关系重命名为其他东西,例如claveProfesionObject

public function relations()
{
    return array(
        ...
        'claveProfesionObject' => array(self::BELONGS_TO, 'Tblprofesion', 'claveProfesion'),
    );
}
于 2013-06-24T08:46:13.927 回答