PHP - Каков наилучший способ обработки ошибок при доступе к глубоким свойствам глубоких объектов? - PullRequest
0 голосов
/ 12 февраля 2019


Я занимаюсь разработкой проекта со сложными отношениями модели (Laravel)
У меня более 10 таблиц с множеством внешних ключей.
Теперь я застрял в обработке ошибки при доступе к глубокому свойствучерез много уровней красноречивых объектов. Ниже приведен пример отношений

    Category
       ||
       ||
    Product    ===     Seller    ===    User === Country === Region
       ||                ||              ||
       ||                ||              ||
      Cart          Seller Level        Buyer
       ||                                ||
       ||                                ||
     Invoice ==============================

Вот простой скрипт для получения страны продавца / покупателя по указанному счету - Eloquent

$invoice = Invoice::find($id);
$countrySeller = $invoice->cart->product->seller->user->country; //6 levels
$countryBuyer = $invoice->buyer->user->country; // 4 levels

В неудачный день скрипт получил ошибку Trying to get property of non-object в laravel.log - без строки ошибки.

После отладки обнаружил проблему.Отсутствуют данные о доступе к свойству.

Первое решение выглядит странным.Это проверка установлена ​​для всех дочерних свойств

if (isset($invoice->buyer) && isset($invoice->buyer->user) && isset($invoice->buyer->user->country)) {
    // Do sth
}

Я пытался обернуть вышеупомянутый скрипт в блок try-catch.Это тоже не сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...