yii реляционная активная запись - PullRequest
1 голос
/ 19 декабря 2011

У меня есть ситуация, здесь есть две модели. Пользователь, Сообщения. Теперь я хочу перечислить сообщения, опубликованные пользователем, у которого userType = 1. Возможно ли это, изменив отношения между пользователем и сообщениями или добавив какие-либо области видимости?

Отношения которые у меня сейчас

User
'Posts' => array(self::HAS_MANY, 'Post', 'userId'),

Posts
'User' => array(self::BELONGS_TO, 'User', 'userId'),

Ответы [ 3 ]

1 голос
/ 19 декабря 2011

Вы можете сделать это с именованными областями или с отношениями.Например, вы можете определить свое отношение следующим образом:

'Posts' => array(self::HAS_MANY, 'Post', 'userId', 'condition' => 't.userType=1')

О «Именованных областях» читайте здесь: http://www.yiiframework.com/doc/guide/1.1/en/database.ar#named-scopes

1 голос
/ 24 декабря 2011

Вы можете настроить определение отношения, добавив свой фильтр в виде именованной области действия на лету, например:

    class User extends CActiveRecord
{
    public function relations()
    {
        return array(
            'Posts'=>array(self::HAS_MANY, 'Post', 'userId',
                'with'=>array(
                    'User'=>array(
                        'scopes'=> array(
                            'userType' => 1,
                        ),
                    ),
                ),
            ),
        );
    }
}

Более подробную информацию можно найти в руководстве по Yii для реляционного запроса-с-named-прицелы

0 голосов
/ 19 декабря 2011

То, что вы хотите сделать здесь, называется реляционным запросом ActiveRecord.В документации говорится :

В запросе реляционного AR имя псевдонима для первичной таблицы фиксируется как t, а имя псевдонима для реляционной таблицы совпадает с соответствующимимя отношения по умолчанию.Например, в следующем выражении псевдонимом для Post и Comment является t и comments, соответственно.

Итак, что вам нужно сделать здесь:

$posts = Posts::model()->findAll('user.userType = 1');
...