0

我有 4 个订单付款用户和个人资料表。付款belongs_to与订单有关。Order 与 user 有belongs_to关系,而 user has_many 个人资料。

在 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,
        ));
    }
4

2 回答 2

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
于 2013-09-19T16:54:39.227 回答
0

在模型中试试这个:

public function getFirstname(){
    return $this->order->user->profiles->firstname;
}

在网格中:

$data->firstname;
于 2013-09-19T16:07:14.377 回答