我正在尝试使用任何语法,并且无法想象我怎样才能正确地写出来:
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服务器版本对应的手册,以便在第1行的''用户'修改'年龄'DATETIME'附近使用正确的语法
是的,我已经检查过,MariaDB使用MySQL的语法(至少在这种情况下)。
答案 0 :(得分:35)
使用反向标记而不是单引号来转义MySQL中的标识符:
alter table `users` modify `age` datetime
在这种特殊情况下,您可以省略转义:
alter table users modify age datetime
答案 1 :(得分:26)
问题(如@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();
});
请注意,由于Doctrine中存在错误,最后一个解决方案有时会引发错误,如果表中包含枚举(通常不是您要更改的列),通常会出现错误。