Mil*_*iez 34 php mysql sql laravel laravel-4
我正在尝试使用任何语法,无法思考如何正确地写这个:
Schema::table('users', function(Blueprint $table){
$sql = <<<SQL
ALTER TABLE 'users' MODIFY 'age' DATETIME
SQL;
DB::connection()->getPdo()->exec($sql);
});
Run Code Online (Sandbox Code Playgroud)
也尝试过
DB::statement('ALTER TABLE \'users\' MODIFY COLUMN DATETIME);
Run Code Online (Sandbox Code Playgroud)
和双引号等.我在运行迁移时总是得到以下信息:
语法错误或访问冲突:1064 SQL语法中有错误; 检查
与您的MariaDB服务器版本对应的手册,以便在''用户'附近使用正确的语法在第1行修改'age'DATETIME'
是的,我已经检查过,MariaDB使用MySQL的语法(至少在这种情况下).
pot*_*hin 37
使用反向标记而不是单引号来转义MySQL中的标识符:
alter table `users` modify `age` datetime
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,你可以省略逃避:
alter table users modify age datetime
Run Code Online (Sandbox Code Playgroud)
Yah*_*din 31
问题(如@postashin所说)是反击.
从Laravel 5开始(对Laravel 4不太确定),您可以这样做:
DB::statement('ALTER TABLE `users` MODIFY `age` DATETIME');
Run Code Online (Sandbox Code Playgroud)
事实上,你甚至不需要后退,因为它们不需要转义.所以你可以写完:
DB::statement('ALTER TABLE users MODIFY age DATETIME');
Run Code Online (Sandbox Code Playgroud)
如果您只是执行数据库语句,则在闭包中不需要这个.
但是,更好地处理您正在做的事情如下:
Schema::table('users', function(Blueprint $table) {
$table->dateTime('age')->change();
});
Run Code Online (Sandbox Code Playgroud)
请注意,由于Doctrine中的错误,最后一个解决方案有时会引发错误,如果表中有枚举(通常不是您要更改的列),通常会发生错误.
有关更多信息,请参阅Laravel数据库迁移 - 修改列