class AlterTableSomething extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('table', function (Blueprint $table) {
$table->text('column_name')->change();
});
}
}
// Let's assume we change an integer column's type to string
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('yyy', function (Blueprint $table) {
$table->string('xxx')->change();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('yyy', function (Blueprint $table) {
$table->integer('xxx')->change();
});
}
return new class extends Migration
{
public function up()
{
Schema::table('sandbox', function (Blueprint $table) {
$table->text('column_name')->change();
});
}
public function down()
{
Schema::table('sandbox', function (Blueprint $table) {
$table->string('column_name')->change();
});
}
};
7条答案
按热度按时间xdnvmnnf1#
您可以创建一个新的迁移并仅更改一个列类型:
字符串
您需要安装
doctrine/dbal
才能使其工作型
适用于Laravel 5.0+。不适用于Laravel 4.2。
lf5gs5x22#
这可以通过一个TABLE迁移来实现。
正如在其他文章中提到的,确保从项目根运行
composer require doctrine/dbal
。这些机构的设置包括:
字符串
从你的项目根。
来自文档:
https://laravel.com/docs/master/migrations#modifying-columns
型
pnwntuvh3#
根据Laravel Doc
你可以这样做
字符串
确保将doctrine/dbal依赖项添加到composer.json文件中
9vw9lbht4#
如果您在使用
change()
时出现以下错误请求未知的数据库类型枚举,Doctrine\DBAL\Platforms\MySQL80Platform可能不支持它。
这意味着在你的表中存在一些列(不一定是被改变的),它具有枚举类型。所以你可以使用下面的函数来代替
change()
:字符串
像这样使用:
$this->changeColumnType('sometable','text','TEXT');
hc8w905p5#
跟踪为我工作。
当然,你需要安装doctrine/dbal才能使其工作,在终端中使用以下命令。
字符串
然后按照此处所述创建迁移-https://laravel.com/docs/master/migrations#generating-migrations
打开您的迁移文件并在下面写下。
型
由于longText最多有4,294,967,295个字符的限制,Laravel会自动将column_name改为longText数据类型。
6qfn3psc6#
要做到这一点,你需要doctrine/dbal,这是真的。
“小心!”“小心!”“小心!”“小心!”“小心!”
有个更安全的办法
1.备份您的项目文件!
1.看看你的composer.json文件来记录你的PHP版本。假设你有7.2.5。现在,搜索一个兼容的版本,在这个例子中是2.13.9。
x1c 0d1x的数据
1.如果您不想弄乱其他依赖项,请确保使用以下命令安装此软件包
字符串
1.现在,我们准备做出改变!
型
型
型
b4wnujal7#
之前建议的解决方案都很好,但令我惊讶的是,除了@Ahmet Firat Kele之外,没有人提到
down()
方法。当您运行php artisan migrate:rollback
命令时,会执行此方法,并且在执行后,我们应该拥有在运行此迁移之前所做的更改。这是关键!
字符串