Ответы пользователя по тегу Laravel
  • Как правильно деплоить laravel проект?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    Т.к вы не работали с системами контроля версий и не сталкивались с деплоем, то я не буду вам советовать CI/CD с различными ветками и тд. Вам сходу будет сложно разобраться.

    Предлагаю для начала более простой способ:

    Если проект коммерческий, то создаем приватный репозиторий в каком-то сервисе (к примеру, GitHub).
    Коммитим (фиксируем) изменения и пушим их в репозиторий.
    Контроль версий нам нужен для того, чтобы хранить историю изменений проекта, делать откаты в случае ошибки и тд.

    У Laravel есть пакет Laravel Envoy. В файле Envoy.blade.php описывыем список команд что нужно сделать на сервере, подключившись по SSH.
    @task('production:deploy', ['on' => 'production'])
        cd /var/www/my-project-folder
    
        git pull origin master // подтягиваем изменения из репозитория
    
        php composer install --no-dev --optimize-autoloader
    
        php artisan migrate --force // запуск миграций
    @endtask

    И локально (на своем ПК) запускаем таску envoy run production:deploy. Envoy подключится по SSH к серверу и запустит там эти команды.

    Про работу с базамы данных:

    Должно быть несколько БД: локальная и продакшн.
    Допустим, я хочу добавить новое поле в БД. Для этого локально создаю миграцию (это обычный php-класс), описываю какое поле добавить и запускаю её. Коммичу изменения в git и делаю пуш в репозиторий. И запускаю таску envoy run production:deploy, а там у нас уже есть команда для миграций.
    Для генерации тестовых данных для локальной бд можно использовать сиды.
    Ответ написан
  • Почему возникает ошибка Duplicate entry for key user_id_unique?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    Ключ user_locations_user_id_unique из каких полей состоит?
    В ContactRequest есть валидация на уже существующее значение в бд? Если нет, то в условии
    if (!$id = $request->input('id')) {}будет ошибка.

    И вообще, нужно логику разбить на 2 экшена (create и update), а не мешать всё в кучу
    Ответ написан