yii显示其他表中cgridview上的数据
我在使用外键在cgridview上显示数据时遇到问题。 这是我的例子,我有表employee(id,username)、client(id,username)和事务(id,employeeId,clientId)。employeeId是employee.id的外键,clientId是client.id的外键。现在,我想在transaction admin.php上显示员工姓名和客户姓名,而不是他们的id。 这是我的代码: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
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
)可能会帮助我们。对不起,这实际上是我的错。数据库中有一个错误。我的编码很好。无论如何,谢谢你的帮助。