yii显示其他表中cgridview上的数据

yii显示其他表中cgridview上的数据,yii,foreign-keys,cgridview,Yii,Foreign Keys,Cgridview,我在使用外键在cgridview上显示数据时遇到问题。 这是我的例子,我有表employee(id,username)、client(id,username)和事务(id,employeeId,clientId)。employeeId是employee.id的外键,clientId是client.id的外键。现在,我想在transaction admin.php上显示员工姓名和客户姓名,而不是他们的id。 这是我的代码: class Transaction extends CActiveReco

我在使用外键在cgridview上显示数据时遇到问题。 这是我的例子,我有表employee(id,username)、client(id,username)和事务(id,employeeId,clientId)。employeeId是employee.id的外键,clientId是client.id的外键。现在,我想在transaction admin.php上显示员工姓名和客户姓名,而不是他们的id。 这是我的代码:

class Transaction extends CActiveRecord
{
    public $client_search;
    public $employee_search;

public function rules()
{
    return array(
        .
        .
        .
        array('id, employeeId, clientId, balance, status, date, client_search, employee_search', 'safe', 'on'=>'search'),
    );
}

public function relations()
{
    return array(
        'employee' => array(self::BELONGS_TO, 'Employee', 'employeeId'),
        'client' => array(self::BELONGS_TO, 'Client', 'clientId'),
    );
}

public function search()
{
    $criteria=new CDbCriteria;
    $criteria->with = array( 'client', 'employee' );

    $criteria->together = true;
    $criteria->compare('t.id',$this->id,true);
    $criteria->compare('employee.username', $this->employee_search, true );
    $criteria->compare('client.username', $this->client_search, true );
    $criteria->compare('t.balance',$this->balance,true);
    $criteria->compare('t.status',$this->status);
    $criteria->compare('t.date',$this->date,true);

    return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
    ));
}

 //the other functions are there, i don't edit it.
}
这是我的模型/Transaction.php

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'transaction-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'id',
    array(
        'header' => 'Employee',
        'name' => 'employee_search',
        'value' => '$data->employee->username',
    ),
    array(
        'header' => 'Client',
        'name' => 'client_search',
        'value' => '$data->client->username',
    ),
    array(
        'class'=>'CButtonColumn',
    ),
),
)); 

如果不能够调试代码,很难猜测,但这里有一些东西可能会有所帮助(我会根据自己的想法添加更多内容)

这可能是因为关系的默认
joinType
都是
LEFT-OUTER-JOIN
,可能您有一个
事务
,其中一个为空?如果您试图访问null对象上的属性(与实际的
ActiveRecord
对象相反),您将看到的错误消息正是这个

您可以通过以下操作进行更改:

public function relations()
{
    return array(
        'employee' => array(self::BELONGS_TO, 'Employee', 'employeeId',array('joinType'=>'INNER JOIN')),
        'client' => array(self::BELONGS_TO, 'Client', 'clientId',array('joinType'=>'INNER JOIN')),
    );
}
p.S.:
内部连接
与刚才的
连接

不确定它是否对你有帮助,但值得一试


更多信息请访问:

添加尽可能多的代码。例如,控制器(在这里输入视图变量
$model
)可能会帮助我们。对不起,这实际上是我的错。数据库中有一个错误。我的编码很好。无论如何,谢谢你的帮助。