ERR_CONNECTION_RESET появляется каждый раз, когда я хочу получить доступ к коллекции hasMany в моей модели в Laravel - PullRequest
2 голосов
/ 02 октября 2019

У меня странная проблема, с которой я не могу справиться. У меня есть простое приложение для магазинов в Laravel и Vue / Vuex для внешнего интерфейса.

Моя Order модель имеет отношение hasMany:

public function items()
{
    return $this->hasMany(OrderItem::class);
}

и все в порядке.

Я делаю GET /orders/ запрос от действия vuex, чтобы получить orders от Laravel. Это мое OrderController@index действие:

// Return JSON response if wantsJson otherwise just show View.
if ($this->request->wantsJson()) {
    $orders = Order::with(['client', 'items'])->orderBy('id', 'desc')->get();

    return response()->json($orders);
}

return view('panel.orders.index');

Как мы можем видеть ниже, оно работало как исключение - вернул ответ JSON с orders.

successfully fetch orders

Каждое order имеет два $appends поля: total_net & total_net_after_discounts и его методы: getTotalNetAttribute() & getTotalNetAfterDiscountsAttribute().

Для $appends вычислений мне нужноitems предметы отношений. Поэтому внутри getTotalNetAttribute() метода я пытаюсь получить элементы отношения:

public function getTotalNetAttribute()
{
    $items = $this->items;
}

Когда я просто добавляю $this->items в метод, я получаю ответ: ERR_CONNECTION_RESET . Весь мой ответ после этого нарушается. Я даже не могу войти:

public function getTotalNetAttribute()
{
    logger($this->items); // it just breaking up my response: ERR_CONNECTION_RESET
}

enter image description here

Еще одна странная вещь заключается в том, что она работает в tinker. Я имею в виду, я могу использовать $this->items, суммировать их цены и получить $order->total_net значение без проблем.

РЕДАКТИРОВАТЬ: Я нашел обходной путь:

public function getNetPriceAttribute()
{
    $orderItems = $this->hasMany(OrderItem::class)->get();

    return $orderItems->sum(function ($item) {
        return $item->net_price;
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...