0

Posts、Users、Images の 3 つのテーブルがあるとします。投稿は users テーブルと関係があり、画像は user テーブルと関係があるため、投稿はユーザーに属し、画像はユーザーに属します。

Post {
    post_id
    user_id
}

Users {
     user_id
}

Images {
    image_id
    user_id
}

Yii では、関係をモデルで定義できるようになりました。私は次のように関係を設定しています:

<?php

class Users extends CModel {
    public function relations() {
      'images' => array(self::HAS_ONE, 'Images', 'user_id')
      'posts' => array(self::HAS_MANY, 'Posts', 'user_id')
    }
}

class Images extends CModel {
    public function relations() {
      'user' => array(self::HAS_ONE, 'Users', 'user_id')
    }
}

class Posts extends CModel {
    public function relations() {
      'user' => array(self::HAS_ONE, 'Users', 'user_id')
    }
}

Yii では、DBCriteria を使用して、「with」関数で CDbCriteria を使用してこれを照会できます。私の質問は、Post モデルでクエリを実行し、Users モデル内の関係を使用してユーザーの画像を取得する方法です。

例:

CActiveDataProvider('Posts', array(
            'criteria'=>array(
                'with' => array('users', 'Users.images'),
            ),
            'pagination'=>array(
                'pageSize'=>20,
            ),
        ));

Yiiでこれを達成する方法はありますか?

4

2 に答える 2

1

モデルでdefaultScope を使用Usersして、常にモデルに参加させることimagesができます。

public function defaultScope()
{
    return array(
        'with'=> array("images")
    );
}
于 2013-06-06T15:55:07.627 に答える
0

これはあなたにとって「どーも...」の瞬間かもしれないと思いますが、Posts モデルから Users モデルへの関係は、users ではなく user と名付けられています。with() 関数は、モデルではなくリレーションを参照します。

于 2013-06-07T14:14:31.177 に答える