Ответ 1
Используйте обратные тики вместо одиночных кавычек для удаления идентификаторов в MySQL:
$sql = 'ALTER TABLE `users` MODIFY `age` DATETIME';
В этом конкретном случае вы можете вообще отказаться от экранирования.
Я пытался с любым синтаксисом и не мог подумать, как я могу написать это правильно:
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#modifying-columns