0

これは私を夢中にさせています。多くの回答とチュートリアルを読みましたが、ここで問題を特定できません。

私は 2 つのテーブルを持っています: tblEmpleadotblProfesion これ は、それらが持っている MySQL リレーションのイメージです (赤でマーク)

tblEmpleadoのデータを表示するときに、テーブルtblProfesionCGridViewの属性「説明」に表示したい。

claveProfesion.descripcion を無駄に使用してみました (「.descripcion」部分がなくても、FK の INT 番号が表示されます)。また、次のようなものを使用してみました:

array( '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 View コードの 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',
        ),
    ),
)); ?>

最後に、関連するかどうかはわかりませんが、モデルクラス"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 に答える