Yii: ограничение отношения HAS_MANY

Простая история. У меня есть пользователи и сообщения в блогах, пользователи относятся к сообщениям в блогах как ОДИН ко МНОГИМ. Я хотел бы показать пользователям их профиль вместе с 5 последними сообщениями, которые они написали:

/**
     * @return array relational rules.
     */
    public function relations()
    {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.
        return array(
            'posts' => array(self::HAS_MANY, 'BlogPost', 'userId')
        );
    }

Я пытаюсь применить лимит:

$user = User::model()->with(array(
            'posts' => array('order' => 'updatedAt DESC'),
            ->findAll(array(
                'condition' => 'userId = :userId AND ...',
                'params' => array(
                    'userId' => $userId
                ),
                'limit' => 5
            ));

Но инфраструктура Yii игнорирует это. Как я могу это сделать?

Это Yii 1.1.


person Denis Kulagin    schedule 30.11.2016    source источник


Ответы (2)


Вы должны включить ограничение в with:

$user = User::model()
    ->with(array(
        'posts' => array(
            'order' => 'updatedAt DESC',
            'limit' => 5
        )
    ))->findAll(array(
        'condition' => 'userId = :userId AND ...',
        'params' => array(
            'userId' => $userId
        ),

    ));
person topher    schedule 30.11.2016
comment
Думал об этом. Тоже не помогает. - person Denis Kulagin; 30.11.2016

Функция Relations() должна выглядеть следующим образом:

return array(
  'posts' => array(self::HAS_MANY, 'BlogPost', 'userId'),
  'recentPosts' => array(self::HAS_MANY, 'BlogPost', 'userId',
    'order' => 'updatedAt DESC',
    'limit' => 5
  )
);

по номеру $user->posts вы получите все сообщения, по номеру $user->recentPosts — только последние 5.

person Mat    schedule 06.12.2016