• В чем преимущества Route Model Binding?

    @jazzus
    1) В твоем случае вообще нужно юзать ресурсные роуты, которые работают с биндингом, а это еще минус строки кода. Далее тебе нужно проверить права доступа, а значит политики авторизации, с ресурсными контроллерами, это еще минус код тк они конектятся одной строкой кода ко всем методам и модель через биндинг передается автоматом в политику. А в этом и есть смысл фрейморка - не писать код самому и не пилить кривые велосипеды.
    2) Модель тебе может понадобиться в мидлварях, форм реквестах, политиках, с биндингом тебе не нужно делать на каждом этапе свои одинаковые запросы.
    3) Что такого в load неудобного не понял? Тот же самый with.
    4) если ты проверяешь права доступа к модели, то тебе обычно не нужны ее отношения и поэтому нет смысла их грузить до проверки в политиках - это будут лишние запросы если авторизация не прошла. Для этого биндинг дает именно то, что тебе надо - чистую модель.
    5) Where в модели не нужен. То, что ты проверяешь статус в модели - это проверка доступа, которую нужно делать в политике.
    6) Удобно, красиво, быстро и необходимо для полноценного использования Ларавел, а не только роуты, контроллеры и вьюхи как в 99% проектов.
    Ответ написан
    4 комментария
  • В чем преимущества Route Model Binding?

    iMedved2009
    @iMedved2009
    Не люблю людей
    К посту jazzus который не поленился и написал все что должен был сказать я, когда предлагал route model binding, добавлю

    1. А нахрен в этом конкретном случае делать loadRelation('reviews') - оно автоматом подгрузится при использовании во вьюхе $post->reviews. Eager loading имеет смысл когда вы грузите кучу моделей и у них надо подгрузить отношение - что бы избежать N+1. А в этом случае какое N+1 мы избегаем? Это еще имело смысл в случае loadRelation('reviews.user') - но просто loadRelation('reviews') - нет. Ну и всегда остается вариант когда вы with запихиваете на момент resolve model.

    2. Вариант проверки статуса вполне возможно вообще выносить на уровень middleware для фронта через глобал скоуп, я так понимаю у вас этот статус сродни soft deletes

    3. На счет количества файлов и разноса функционала. Я так понимаю у вас table-driven development. Ради интереса наберите Domain-Driven Development в ютубе и посмотрите как там. ну к примеру https://www.youtube.com/watch?v=7HXIrEsmlzM&ab_cha...
    Ответ написан
    34 комментария
  • Как реализовать пресеты для фильтра (SEO-фильтр)?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    Проблема 1) из массива можно сделать строку, http_build_query()
    Проблема 2) Мож на моменте добавления в базу и на иоиенте проверки наличия в базе сортировать массив по алфавиту и тогда очередность будет не важна.
    Проблема 3) $features = $request->query(); вместо этого лучше бы использовать валидацию.
    Ответ написан
    2 комментария
  • Как сделать редирект с www и index.php?

    @dodo512
    Сразу после RewriteEngine On добавить
    RewriteRule ^index\.php/(.*) http://site.local/$1 [R=301,L]
    
    RewriteCond %{HTTP_HOST} ^www\. [NC]
    RewriteRule .* http://site.local/$0 [R=301,L]
    Ответ написан
    5 комментариев
  • Проблема в выборе отношения или не правильная структура базы данных?

    @vism
    Так замечательно задан вопрос, что аж ответить захотелось!

    Структура у вас правильная, нсколько я понял из описания.

    И поторой такие "цепочки связей" бывают не из 3-х звеньев, а из 10-ти:)
    Просто у лараваель есть hasManyThrough через 1 таблицу, но это ни к чему не обязывает. Недавно видел пакет hasManyThrough для 2+ промежуточных таблиц.
    Для получения обратных связей по belongTo просто используете так, никакого обратного hasManyThrough тут и ненадо:
    $color->collection;
    $color->collection->manufacturer;
    Ответ написан
    Комментировать