Вопрос
Этот вопрос касается Laravel и почему его так сложно установить на веб-сервер с MariaDB (ниже 10.2.2) или MySQL (ниже 5.7.7). Возможно, вы даже не сможете запустить первую миграцию.
Причина
Laravel по умолчанию использует набор символов utf8mb4, который включает поддержку для хранения «emojis» в базе данных. Если вы используете версию MySQL, более раннюю, чем версия 5.7.7, или MariaDB, более раннюю, чем версия 10.2.2, вам может потребоваться вручную настроить длину строки по умолчанию, создаваемую миграциями, чтобы MySQL создавал для них индексы.
(слово в слово копируется из Документация Laravel )
Решение
Сначала ошибки / исключения выглядят так, что ваша база данных MySQL / MariaDB не поддерживается приложением. Нужно ли что-то менять? Нужно ли что-то настраивать?
Решение простое. В соответствии с документацией Laravel, упомянутой в разделе «Причина», вам необходимо указать свой defaultStringLength
, которым управляет Schema
.
Вам необходимо отредактировать файл в вашей установке Laravel, который находится по адресу app/Providers/AppServiceProvider.php
Страница по умолчанию выглядит следующим образом:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
Вам нужно всего лишь изменить два правила.
- В
usings
необходимо добавить Schema
use Illuminate\Support\Facades\Schema;
- Вам необходимо указать
defaultStringLength
в методе загрузки
Schema::defaultStringLength(191);
После изменений код должен выглядеть следующим образом:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
}
Это скажет вашим миграциям, как обращаться с defaultStringLength
и что с ним делать. После этого дополнения вы сможете запустить свой первый php artisan migrate
и начать создавать классные вещи!