0

注文支払いのユーザーとプロファイルの 4 つのテーブルがあります。支払いはbelongs_to注文と関係があります。注文は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,
        ));
    }
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 に答える