Intereting Posts
помещает маркер в URL безопасно, чтобы предотвратить атаки CSRF в приложениях PHP? Как перенаправить и / или задержать в зависимости от реферера? WordPress wp_remote_post () дает «ошибка cURL 6: не удалось разрешить хост» Запретить все файлы, кроме индекса, используя apache Любое альтернативное решение для получения этой работы? Php-код работает неправильно, но работает код mysql Как получить первые х символов из строки, не отрезая последнее слово? Класс ZMQContext не найден, даже если ZMQ установлен Форматирование результатов запроса MySQL, как если бы он запускался с консоли выберите значение параметра из базы данных по выбранным Инъекция зависимостей Laravel в промежуточном программном обеспечении Laravel не определен Присвоение результата функции переменной в классе PHP? Опухоль Неустранимая ошибка: исключить исключение «mysqli_sql_exception» с сообщением «Нет индекса, используемого в запросе / подготовленной заявке» Проблема с MySQL AES_DECRYPT Как преобразовать массив в строку слов, разделенных запятой?

Laravel 5.1 Неизвестное имя типа базы данных

Во время миграции php artisan я получил следующую ошибку

[Учение \ DBAL \ DBALException]
Неизвестный запрос типа базы данных, Doctrine \ DBAL \ Platforms \ MySqlPlatform может не поддерживать его.

Как решить эту проблему.

Код:

public function up() { Schema::table('blogs', function (Blueprint $table) { $table->string('wordpress_id')->nullable(); $table->string('google_blog_id')->nullable()->change(); }); } 

Официальная документация Laravel 5.1 гласит:

Примечание. Переименование столбцов в таблице с столбцом перечисления в настоящее время не поддерживается.

Не имеет значения, пытаетесь ли вы изменить другой столбец, если таблица содержит enum любом месте, где оно не будет работать. Это проблема DBAL Doctrine.

В качестве обходного пути вы можете либо удалить столбец, либо добавить новый ( данные столбца будут потеряны ):

 public function up() { Schema::table('users', function(Blueprint $table) { $table->dropColumn('name'); }); Schema::table('users', function(Blueprint $table) { $table->text('username'); }); } 

или использовать инструкцию DB:

 public function up() { DB::statement('ALTER TABLE projects CHANGE slug url VARCHAR(200)'); } public function down() { DB::statement('ALTER TABLE projects CHANGE url slug VARCHAR(200)'); } 

Источник: https://github.com/laravel/framework/issues/1186

Это известный вопрос, как указано в документации Laravel 5.1.

Примечание. Переименование столбцов в таблице с столбцом enum в настоящее время не поддерживается.

Это происходит, когда в таблице базы данных имеется столбец enum . Если вы пытаетесь переименовать другой столбец или изменить другой столбец на nullable , эта ошибка появится. Это проблема с Doctrine\DBAL .

Легкое решение для этого – просто добавить этот метод конструктора в файл миграции базы данных.

 public function __construct() { DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); } 

Это отобразит все столбцы ENUM в VARCHAR() , и столбец примет любую строку.

Это сработало для меня на Laravel 5.1 и Laravel 5.3. Я надеюсь, что эта ошибка может быть исправлена ​​в ближайшее время.

Ответьте на ответ @ Gmatkowski на https://stackoverflow.com/a/32860409/1193201

Реальное грязное решение, которое выполняет свою работу, тем не менее будет

 update Doctrine/DBAL/Schema/MySqlSchemaManager.php 

добавив эти строки чуть выше строки 113

 $this->_platform->registerDoctrineTypeMapping('enum', 'string'); $type = $this->_platform->getDoctrineTypeMapping($dbType); 

Помните, что обновление файлов поставщика напрямую нецелесообразно, поскольку в случае, когда vonder выбирает обновление плагина, ваши изменения могут быть перезаписаны