Задать вопрос
@MaikMain
Начинающий backend - developer

Ошибка при выводе многомерного массива в цикле. Yii2?

Всем, привет. Пытаюсь построить вывод в дропдауне название статусов с название груп, к которым они относятся.
Должно получится вот так:
63f53f49cad1f927870951.jpeg

У меня есть три таблицы: Orders. Здесь связь такая:
public function getOrderStatus(): ActiveQuery
    {
        return $this->hasOne(OrdersStatuses::class, ['id' => 'status_id']);
    }

В OrdersStatuses:
public function getGroup(): ActiveQuery
    {
        return $this->hasOne(OrderStatusGroups::class, ['id' => 'group_id']);
    }

    public function getOrders(): ActiveQuery
    {
        return $this->hasMany(Orders::class, ['status_id' => 'id']);
    }

В OrderStatusGroups:
public function getStatuses(): ActiveQuery
    {
        return $this->hasMany(OrdersStatuses::class, ['group_id' => 'id']);
    }


В экшине контроллера пишу так:
$orderStatuses = ShopOrdersStatuses::find()->all();
$statusList = [];

foreach ($orderStatuses as $orderStatus) {
   $statusList[$orderStatus->group->name][$orderStatus->id] = $orderStatus->name ;
}

$statusList = ArrayHelper::merge(['' => 'Все'], ArrayHelper::map($orderStatuses, 'id', 'name'));


В return:
return $this->render('update', [
            'model' => $model,
            'orderStatuses' => $statusList,
        ]);


Но выскакивает ошибка: Attempt to read property "name" on null
B ссылается на строчку в цикле.
63f541c60d59a634168084.jpeg

В БД все данные есть, все записано, нигде null не стоит.
PHP 8.1

Подскажите пожалуйста где у меня ошибка и в какую сторону вообще копать?
За ранее большое спасибо =)
  • Вопрос задан
  • 231 просмотр
Подписаться 1 Простой 13 комментариев
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
У вас связь group для одного из статусов вернула null, а вы из этого null тяните свойство name.
Делайте проверку на null перед этим
foreach ($orderStatuses as $orderStatus) {
   $name = $orderStatus->group ? $orderStatus->group->name : 'TamaraGoniGusei';
   $statusList[$name][$orderStatus->id] = $orderStatus->name ;
}
Ответ написан
@pantsarny
Вы в цикле идете по всем имеющимся в базе статусам, но не факт что для всех статусов есть хотя бы один заказ

https://www.yiiframework.com/doc/api/2.0/yii-widge...
А еще посмотрите как items можно группировать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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