Yii2 установить пустое значение

209
21 февраля 2018, 11:37

Есть таблица deal, которая состоит из id, name, connect_deal. Последний столбец содержит id связанной строки этой же таблицы, если он есть. Чтобы удалить значения из connect_deal выполняю следующий код:

    $deal = Deal::findOne($id);
    $conId = $deal->connectDeal;
    $deal->connectDeal = null;
    if ($deal->save()) {
        $upDeal = Deal::findOne($conId);
        $upDeal->connectDeal = null;
        $result = $upDeal->save();
        if ($result) {
            Yii::$app->session->setFlash('success', 'Связь успешно удалена');
            return $this->refresh();
        }
    }
    ....

В итоге данные удаляются, как мне и нужно, но получается ошибка, дебагер выделяет строку $upDeal->connectDeal = null; и выводит warning Creating default object from empty value, при том, что $deal->connectDeal = null вопросов у программы не вызывает. С чем может быть связана ошибка и как её решить?

Answer 1

Ошибка возникает из-за того, что Вы пытаетесь присвоить свойство connectDeal несуществующему объекту. Иными словами $upDeal = Deal::findOne($conId); в определенных ситуациях выдает null. Например, когда связи не было изначально, или связная запись в таблице не существует

Добавьте проверку на 2ой поиск Deal::findOne($conId)

    $deal = Deal::findOne($id);
    $conId = $deal->connectDeal;
    $deal->connectDeal = null;
    if ($deal->save() && ($upDeal = Deal::findOne($conId)) !== null) {
        $upDeal->connectDeal = null;
        $result = $upDeal->save();
        if ($result) {
           Yii::$app->session->setFlash('success', 'Связь успешно удалена');
           return $this->refresh();
        }
    }
READ ALSO
работа с запросами

работа с запросами

как этот запрос сунуть в ассоциативный массив со всеми полями

203
php шаблон, как сделать рендер?

php шаблон, как сделать рендер?

Просьба помочь разобраться с простеньким рендером шаблонаДля удобства весь код разместил в одном файле

214
description на google

description на google

ЗдравствуйтеМне просто интересно, каким образом google подставляет описания и ключевые слова

164
Как сделать проверку по времени?

Как сделать проверку по времени?

Нужно сделать проверку по времени, что бы можно было заходить в админку в указное времяНапример можно было заходить с 09 : 00 : 00 и по 18 : 30 : 00, date("H:i:s");...

152