ARACOOOL
@ARACOOOL
PHP Developer

Как получить данные из релейшена при hasMany и viaTable?

Здравствуйте уважаемые.
Я не могу получить данные из связанной модели.

Есть модель со связью:
class Post extends ActiveRecord {

/**
     * @return \yii\db\ActiveQuery
     */
    public function getUsers()
    {
        return $this->hasMany(User::className(), ['id' => 'user_id'])
            ->viaTable('cube', ['post_id' => 'id']);
    }

/**
     * @return \yii\db\ActiveQuery
     */
    public function getPage()
    {
        return $this->hasOne(Page::className(), ['id' => 'page_id'])
            ->viaTable('cube', ['post_id' => 'id']);
    }
}


Если я получаю одну модель я получаю данные из связанно модели:
$model = Post::findOne(123);
// получаем ID страницы
// Разницы нет использую ли hasMany или hasOne
$model->page->id;


Но если я получаю массив из моделей и обращаюсь к каждой в отдельности, я не могу полусить данные из связанных моделей.
$models = Post::find()->all();

foreach($models as $model) {
    // Тут у меня свойство page == NULL (hasOne)
    // или page ровняется пустому массиву (hasMany)
    // Разницы нет использую ли hasMany или hasOne
    $model->page->id;
}
  • Вопрос задан
  • 654 просмотра
Пригласить эксперта
Ответы на вопрос 1
@matperez
Вроде все правильно. А попробуйте жадную загрузку: Post::find()->joinWith('page')->all().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы