我有4张订单付款用户和个人资料表。付款与订单有belongs_to
的关系。订单与用户和用户has_many配置文件具有belongs_to
关系。
在cgridview中显示付款时,我需要显示存储在个人资料中的用户的名字和姓氏。
我尝试使用:
$data->order->user->profiles->firstname;
还尝试将参数firstname添加到Payment的模型类中,并尝试将setter方法创建为:
public function getFirstname(){
if ($this->_firstname=== null && $this->order !== null) {
$this->_firstname = $this->order->user->profiles->firstname;
}
return $this->_firstname ;
}
public function setFirstname($value){
$this->_firstname = $value ;
}
但我未能得到理想的结果。
编辑:搜索方法具有以下代码:
public function search() {
$criteria = new CDbCriteria;
$criteria->with = array('order.user.profiles') ;
. . . .
$criteria->compare('firstname', $this->_firstname, true);
. . . .
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
答案 0 :(得分:1)
我建议使用“通过”关系,因为它可以让生活更轻松。您所要做的就是,转到您的“付款”模式并添加以下关系,
public function relations()
{
return array(
'order' => array(self::BELONGS_TO, 'Orders', 'order_id'),
'user'=>array(
self::BELONGS_TO,'User',array('user_id'=>'id'),'through'=>'order'
),
'profiles'=>array(
self::HAS_MANY,'Profile',array('id'=>'user_id'),'through'=>'user'
),
);
}
在网格中,您可以使用
访问first_name$data->profiles[0]->firstname
答案 1 :(得分:0)
在模型中试试这个:
public function getFirstname(){
return $this->order->user->profiles->firstname;
}
并在网格中:
$data->firstname;