Разработка
February 20, 2023

Первоначальная настройка Laravel 10 в Windows 11 под MySQL

Шаг 1. Установка ПО

  1. Установить и настроить сервер OSPanel или любой другой.
  2. Установить Composer указав путь к PHP (C:\OSPanel\modules\php\PHP_8.1).
  3. Установить NodeJS.
  4. Установить улучшенный терминал PowerShell 7.
  5. Установить IDE для разработки - PHPStorm или VS Code.
Далее проверяем, чтобы в PATH были указаны пути к PHP, Composer и NodeJS. Если следовать указаниям установщиков, то это всё сделается автоматически. Возможно, понадобится перезагрузка компьютера.
Чтобы убедиться, что всё сделали правильно вводим в Терминале команды php -v, node -v и composer -v.

Шаг 2. Создание нового проекта

Имея установленный Composer выполняем в Терминале следующую команду:

composer create-project laravel/laravel mysite.com

Открываем папку mysite.com в IDE и начинаем редактирование кода.

Шаг 3. Исправление ошибок

Ошибка SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'...

Нужно в файл config/database.php добавить 'modes':

'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => 'InnoDb',
            'modes'  => [
                'ONLY_FULL_GROUP_BY',
                'STRICT_TRANS_TABLES',
                'NO_ZERO_IN_DATE',
                'NO_ZERO_DATE',
                'ERROR_FOR_DIVISION_BY_ZERO',
                'NO_ENGINE_SUBSTITUTION',
            ],
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

Обязательно укажите 'engine' => 'InnoDb', чтобы в будущем не возникало ошибок (по умолчанию, эта опция не указана).

Далее может возникнуть ошибка

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes...

Для этого в файл app/Providers/AppServiceProvider.php добавляем код:

use Illuminate\Support\Facades\Schema;

public function boot(): void {
    Schema::defaultStringLength(191);
}