Условия запроса для привязанной таблицы

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Driver86
Сообщения: 141
Зарегистрирован: 2015.04.13, 14:17

Условия запроса для привязанной таблицы

Сообщение Driver86 »

Даны таблицы: разделы, категории, записи. В моделях настроил связи:

sections.php

Код: Выделить всё

    public function getCategories()
    {
        return $this->hasMany(Categories::className(), ['section_id' => 'id']);
    }

    public function getEntries()
    {
        return $this->hasMany(Entries::className(), ['section_id' => 'id']);
    } 
categories.php

Код: Выделить всё

    public function getSections()
    {
        return $this->hasOne(Sections::className(), ['id' => 'section_id']);
    }

    public function getEntries()
    {
        return $this->hasMany(Entries::className(), ['category_id' => 'id']);
    } 
entries.php

Код: Выделить всё

    public function getSections()
    {
        return $this->hasOne(Sections::className(), ['id' => 'section_id']);
    }

    public function getCategories()
    {
        return $this->hasOne(Categories::className(), ['id' => 'category_id']);
    } 
В экшене раздела получаю данные раздела, а за ним данные категорий раздела и записей раздела:

Код: Выделить всё

$data = Sections::find()->where(['id' => $sectionId, 'status' => Sections::STATUS_ACTIVE])->with(['categories', 'entries'])->one(); 
Подскажите, пожалуйста, как к entries добавить дополнительные условия: 'status' => Entries::STATUS_ACTIVE, а так же orderBy(...), offset(...) и limit(...)?
Спишь?
Alex8552
Сообщения: 36
Зарегистрирован: 2014.10.07, 15:13

Re: Условия запроса для привязанной таблицы

Сообщение Alex8552 »

Код: Выделить всё

Sections::find()->with([
                                      'categories',
                                      'entries'       => function ($query) {
                                           $query->andWhere(['status' => Entries::STATUS_ACTIVE]);
                                           //etc...
                                      },
Ответить