Вызов функции-члена fill () в Null Laravel

Я пытался отредактировать запись. Мой код создаст новую запись, если данные будут нулевыми. Однако я получаю следующую ошибку:

Вызов функции-члена fill() при нулевом значении.

Я не уверен, что сделал не так; может я не заявлял?

Контроллер

<?php

public function auctionUpdate(Request $request, MediaSite $mediaSite)
{
    $auction = $mediaSite->auction;

    DB::transaction(function() use ($request, $mediaSite, $auction){
        $auction->fill($request->only([
           'status', 'start_time', 'end_time', 'period_start_date'
        ]));

        if($auction == null)
            $auction = new Auction();

        $auction->save();
   });

   return view('admin.media-site.show', [
       'mediaSite' => $mediaSite,
       'auction' => $auction
   ]);
}

person Adilah Abdullah    schedule 28.11.2018    source источник
comment
Что такое MediaSite? Что передается вашей функции в качестве аргумента $mediaSite? Предположительно, $mediaSite->auction это null. Может быть, вам стоит переместить свой if($auction == null) $auction = new Auction(); выше $auction->fill()?   -  person Phil    schedule 28.11.2018
comment
MediaSite - это модель, которая также имеет ссылку на модель аукциона. Я хочу отредактировать данные аукциона с помощью модели медиа-сайта   -  person Adilah Abdullah    schedule 28.11.2018
comment
Вы должны проверить значение null и сообщить об ошибке как можно раньше. Проверяющий код должен проверять внешний вывод, находясь только во внешних частях кода, а не во внутреннем коде. Избегайте защитного программирования, вместо этого быстро откажитесь stackoverflow.com/a/490500/2739274   -  person David Lemon    schedule 28.11.2018


Ответы (1)


Вы должны проверить, является ли аукцион нулевым, прежде чем fill ()

ваш измененный сценарий

public function auctionUpdate(Request $request, MediaSite $mediaSite)
{
    $auction = $mediaSite->auction;

    DB::transaction(function() use ($request, $mediaSite, $auction){
        if($auction == null)
            $auction = new Auction();

        $auction->fill($request->only([
           'status', 'start_time', 'end_time', 'period_start_date'
        ]));

        $auction->save();
   });



   return view('admin.media-site.show', [
       'mediaSite' => $mediaSite,
       'auction' => $auction
   ]);
}
person Emtiaz Zahid    schedule 28.11.2018
comment
решил ошибку, но редактировать и сохранять не работает. Спасибо, кстати. - person Adilah Abdullah; 28.11.2018
comment
Я только что понял, что могу редактировать, но не могу сохранить, если это пустое значение. - person Adilah Abdullah; 29.11.2018
comment
какое исключение - person Emtiaz Zahid; 29.11.2018
comment
извините, я не понимаю, что это за исключение? - person Adilah Abdullah; 29.11.2018
comment
удалите транзакцию БД, тогда вы получите ошибку - person Emtiaz Zahid; 29.11.2018
comment
хорошо, я только что что-то сделал, и когда я нажимаю «Сохранить», обновленные данные не отображаются, но когда я ушел и вернулся на страницу, информация была там. поэтому данные сохраняются, они просто не обновляются на странице. Спасибо, кстати. - person Adilah Abdullah; 29.11.2018