Задать вопрос
@lexstile

Как правильно получать элемент, который связан с помощью hasMany?

Нужно показать конкретный элемент, в моем случае - меню.
Попробовал 2 варианта - оба работают - метод show.
Вопрос: как лучше получать в данном кейсе? Возможно, есть еще вариант, более правильный?
# MenuController
    public function show(Project $project, Menu $menu)
    {
        return $this->baseJson(data: new MenuResource($menu));
    }

    public function show(Project $project, Menu $menu)
    {
        $menu = $project->menu()->find($menu->id);

        return $this->baseJson(data: new MenuResource($menu));
    }

    # ProjectModel
    public function menu()
    {
        return $this->hasMany(Menu::class);
    }
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
@Dastan_UI
Первый вариант самый лучший. Вы используете Implicit Binding. Вы переходите по роуту /my-route/menu/1. Таким образом laravel автоматически ищет Menu::find(1).

Во втором случае вы выполняете два действия.
1. То что выше.
2. Дополнительно ищете Menu::where(relationship)->find(1)

Минусы 2 варианта - вы два раза ищете одно и то же меню, дополнительно во втором разе добавляете условия Relationship, что более медленнее если не указаны индексы
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы