@Maria_Gavrilova

Организация дочерних разделов в laravel?

У меня есть сущность Section и сущность Order, которая принадлежит Section. То есть у order есть поле section_id.
Когда я перехожу по урлу: /sections/3/orders/2 отрабатывает метод контроллера Order show:
public function show(Section $section, Order $order)
{
    return view('orders.show', compact('section', 'order'));
}

Но проблема в том, что при этом не учитывается, что у этого section с id равным 3 нету order с id равным 2, а он всё равно выдаёт ответ, а я хочу, чтобы при этом выбрасовалась 404. Подскажите как это сделать? Какие стандартный путь решения проблемы? Или мне придётся в методе делать запрос: Order::where('id', $order->id)->where('section_id', $order->section_id). Но у меня появится в будущем ещё вложенная сущность по-отношению к Order и и в её контроллере получается я буду уже по трём параметрам искать... Я думала есть в laravel способ сделать это, чтобы он автоматически смотрел связи и выдавал 404, если у родительской сущности нет такой дочерней и наоборот.
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
aleksejjjj
@aleksejjjj
Предполагаю что всё таки придётся дополнительную проверку ручками писать, т.к. очевидно при биндинге связь не учитывается. Section такая есть, Order есть, с точки зрения Laravel всё корректно.

Что-то вроде
if ($order->section_id !== $section->id) {
    abort(404);
}

return view('orders.show', compact('section', 'order'));

Ну это самое прямое решение конечно, возможно и красивее есть.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы