通过关系HAS_ONE检索CGridView中的数据值

时间:2014-05-13 22:03:03

标签: yii

关系:

public function relations() {
    return array(
        'submissionStatus' => array(self::HAS_ONE, 'SubmissionStatus', 'submission_status_id'),
    );
}

GridView中的列值:

'value' => '$data->submissionStatus->submission_status_name',

SubmissionStatus模型属性:

public function attributeLabels() {
    return array(
        'submission_status_id'   => 'Status ID',
        'submission_status_name' => 'Status Name',
    );
}

SubmissionStatus Relations:

public function relations() {
    return array(
        'submissionStatus' => array( self::BELONGS_TO, 'Submission', 'submission_status_id' ),
    );
}

然而我收到了一个错误:

  

尝试获取非对象的属性

为什么我不能通过这种关系检索submission_status_name

修改

另一方面,这完美地运作:

'submissionStatus' => array(self::BELONGS_TO, 'SubmissionStatus', 'submission_status')

数据库:

| tbl_submission                  |
-----------------------------------
| submission_id (int) PK          |
| submission_name (varchar)       |
| submission_status_id (int) FK   | 


| tbl_submission_status            |
------------------------------------
| submission_status_id (int) PK    |
| submission_status_name (varchar) |

2 个答案:

答案 0 :(得分:0)

如果关系字段的值为null,那么您的关系将不会返回Foreign模型的对象;因此调用其中的属性将给出错误 尝试改变

'value' => '$data->submissionStatus->submission_status_name',

'value' => '(isset($data->submissionStatus))?
            $data->submissionStatus->submission_status_name:""',

答案 1 :(得分:0)

这里有两个问题。

  1. 如果你的关系真的有用
  2. hot以获取gridview中的数据
  3. 我认为你在实现中有错误。 BELONGS_TO和HAS_ONE之间的区别在于,它试图以不同的方式创建实现。你可以发布你的数据库表,他们有什么字段,我们需要看看关键和外国jey字段是什么。 我猜在一个表中是id,在另一个表中是submission_status_id。 尝试在这两个中的一个中改变你的关系(尝试其中一个有效):

    1

    'submissionStatus' => array(self::HAS_ONE, 'SubmissionStatus', array('submission_status_id'=>'id'),

    'submissionStatus' => array(self::HAS_ONE, 'SubmissionStatus', array('id'=>''),

    2

    在您的网格中,您使用的代码是正确的,但正如@Manquer的注释中所述,如果关系返回null,它将无效。 但你可以在GridViiew中尝试更多Yii样式,如下所示: 不要仅提供任何value name

    'name'=>'>submissionStatus.submission_status_name'