gpt4 book ai didi

php - 在迁移中运行原始 SQL

转载 作者:IT老高 更新时间:2023-10-28 23:42:25 25 4
gpt4 key购买 nike

我正在尝试使用任何语法,但想不出我该如何正确编写:

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);

和双引号等等。运行迁移时,我总是得到以下信息:

Syntax error or access violation: 1064 You have an error in your SQL syntax; check
the manual that corresponds to your MariaDB server version for the right syntax to use near ''users' MODIFY 'age' DATETIME' at line 1

是的,我已经检查过了,MariaDB 使用 MySQL 的语法(至少在这种情况下)。

最佳答案

问题(正如@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 中的错误,最后一个解决方案有时会引发错误,如果您在表中有枚举(而不仅仅是您正在更改的列),通常会发生这种情况。

有关详细信息,请参阅 Laravel Database Migration - Modifying Column

关于php - 在迁移中运行原始 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28787293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com