Exebeche
@Exebeche
Осваиваю программирование

Почему на странице категории не выводится связанный контент?

Пытаюсь сделать вывод продуктов на странице категории, но получаю ошибку
Trying to get property of non-object
ругается на строку <?= $model->designer->brand_name ?>

Вывожу через listView
<?= ListView::widget([
    'dataProvider' => $dataProvider,
    'itemView' => '_view',
    'itemOptions' => ['class' => 'item'],
    'viewParams' => ['testParam' => 'designer.brand_name'],
    'layout' => "{items}\n{pager}",
]); ?>


Вьюха:
<div class="col-md-4 col-sm-6 col-xs-12 productItem">

    <a href="<?= Url::toRoute(['shop/view', 'id'=>$model->id]); ?>">

        <div class="productItem_image-container" style="background-image: url('<?= $imgs[0]->getUrl('300x400'); ?>')">
            <?php if (isset($imgs[1])): ?>
                <img class="productItem-image" src="<?= $imgs[1]->getUrl('300x400'); ?>" alt="">
            <?php else: ?>
                <img class="productItem-image" src="<?= $imgs[0]->getUrl('300x400'); ?>" alt="">
            <?php endif; ?>
            <?= $model->new ? '<p class="newLabel">new</p>' : '' ?>
            <?= $model->sale ? '<p class="saleLabel">sale</p>' : '' ?>

        </div>

        <span class="productItem_text">
            <p class="productItem_text-title">
                <?= Html::encode($model->title) ?>
            </p>
            <p class="productItem_text-brand">
                <?= $model->designer->brand_name ?>
            </p>
            <p class="productItem_text-price">
                $ <?= Html::encode($model->price) ?>
            </p>
        </span>

    </a>

    <?= WishlistButton::widget([
        'model' => $model, // модель для добавления
        'anchorActive' => '<i class="fas fa-heart"></i>', // свой текст активной кнопки
        'anchorUnactive' => '<i class="far fa-heart"></i>', // свой текст неактивной кнопки
        'htmlTag' => 'a', // тэг
        'cssClass' => 'wish', // свой класс
        'cssClassInList' => 'active' // свой класс для добавленного объекта
    ]) ?>

</div>


В контроллере:
public function actionCategory($id)
    {
        $searchModel = new ProductSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $categories = Category::find()->asArray()->indexBy('id')->all();

        return $this->render('category', [
            'dataProvider' => $dataProvider,
            'searchModel' => $searchModel,
            'categories' => $categories
        ]);
    }


В модели категории:
public function getProducts()
    {
        return $this->hasMany(Product::className(), ['category_id' => 'id']);
    }


Связь с таблицей дизайнеров в таблице продуктов
public function getDesigner()
    {
        return $this->hasOne(Designer::className(), ['id' => 'designer_id']);
    }


В остальных местах подтягивается дизайнер, а в категории - нет.
В search модели категорий есть with('products') в search модели продуктов есть with(['category', 'designer'])

Как сделать дизайнера объектом везде?
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
Exebeche
@Exebeche Автор вопроса
Осваиваю программирование
Все разрешилось заменой кода на <?= $model->designer['brand_name'] ?>
Самое интересное, что вывод этой строки в этом проекте менялся с <?= $model->designer['brand_name'] ?> на <?= $model->designer->brand_name ?> и обратно несколько раз...
Еще бы понять почему?
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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