Intereting Posts
Как отредактировать то, что отображается в шаблоне метадолей одного продукта Woocommerce? Маршрутная привязка модели и мягкие удаления – Laravel 4 CodeIgniter: Можно ли удалить контроллер и функцию из URL с помощью маршрутов или .htaccess? Почему функция PHP htmlentities (…) возвращает неверные результаты? Как установить определенные файлы из пакета с помощью composer.json Страница регистрации и регистрации Laravel 5.5 говорит: страница истекла из-за неактивности. Период подсчета циклов в PHP общий сеанс php PHP htmlspecialchars не работает Unlink Fails -> open_basedir issue Warning: unlink () : действующее ограничение open_basedir. Файл () не входит в допустимые пути: Извлечение данных из строки json со структурным языком Начальная перезагрузка сервера на Ajax-вызов Определить часовой пояс пользователя и отобразить время UTC с этим часовым поясом Когда я должен использовать CMS для создания веб-сайта с нуля? преобразование fgetcsv-ответа в конкретный json

Запуск необработанного SQL в миграции

Я пытался с любым синтаксисом и не могу думать, как я могу написать это правильно:

Schema::table('users', function(Blueprint $table){ $sql = <<<SQL ALTER TABLE 'users' MODIFY 'age' DATETIME SQL; DB::connection()->getPdo()->exec($sql); }); 

также пытался

 DB::statement('ALTER TABLE \'users\' MODIFY COLUMN DATETIME); 

и двойные кавычки и т. д. При выполнении миграции я всегда получаю следующее:

Ошибка синтаксиса или нарушение доступа: 1064 У вас есть ошибка в синтаксисе SQL; проверить
руководство, соответствующее вашей версии сервера MariaDB, для правильного синтаксиса для использования рядом с '' users 'MODIFY' age 'DATETIME' в строке 1

Да, я проверил, MariaDB использует синтаксис MySQL (по крайней мере для этого случая).

Используйте обратные тики вместо одиночных кавычек для исключения идентификаторов в MySQL:

 $sql = 'ALTER TABLE `users` MODIFY `age` DATETIME'; 

В этом конкретном случае вы можете вообще отказаться от экранирования .

Проблема (как сказал @postashin) – это обратные шаги.

Что касается Laravel 5 (не знаю о Laravel 4), вы могли бы сделать это:

 DB::statement('ALTER TABLE `users` MODIFY `age` DATETIME'); 

На самом деле вам даже не нужны обратные тики, так как им не нужно бежать. Так что вы могли бы просто написать:

 DB::statement('ALTER TABLE users MODIFY age DATETIME'); 

Это не нужно в закрытии, если вы просто выполняете инструкцию базы данных.

Однако лучший подход к тому, что вы делаете, заключается в следующем:

 Schema::table('users', function(Blueprint $table) { $table->dateTime('age')->change(); }); 

Обратите внимание, что последнее решение иногда может вызывать ошибку из-за ошибки в Doctirine, которая обычно возникает, если у вас есть перечисление в таблице (а не только столбец, который вы меняете).

Для получения дополнительной информации см. https://laravel.com/docs/5.4/migrations#modification-columns