@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);
    }
  • Вопрос задан
  • 107 просмотров
Решения вопроса 1
@Dastan_UI
Первый вариант самый лучший. Вы используете Implicit Binding. Вы переходите по роуту /my-route/menu/1. Таким образом laravel автоматически ищет Menu::find(1).

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

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

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

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