Gra*_*avy 3 database-migration laravel
我希望增加小数列的小数精度和小数位数。
我知道我可以删除该列并重新创建它,但这样做将意味着丢失该列中的数据。
有没有一种方法可以使用 Laravel Schema::table 来改变列的精度和比例而不删除它?
例如:
Schema::table('prices', function(Blueprint $t) {
$t->buy_price->decimal(5,2);
});
Run Code Online (Sandbox Code Playgroud)
这对我有用:
public function up()
{
Schema::table('prices', function(Blueprint $t) {
$t->decimal('buy_price', 5, 2)->change();
});
}
Run Code Online (Sandbox Code Playgroud)
回滚时使用原始精度值3、1代替
public function down()
{
Schema::table('prices', function(Blueprint $t) {
$t->decimal('buy_price', 3, 1)->change();
});
}
Run Code Online (Sandbox Code Playgroud)
我避免使用数据库特定的“原始”语句,因为当我更改为另一个 DBMS 引擎时它们可能会失败。所以我让 Laravel 在使用 DB 时处理必要的语法
只需创建另一个migration并在up方法中添加以下代码:
public function up()
{
// Change db_name and table_name
DB::select(DB::raw('ALTER TABLE `db_name`.`table_name` CHANGE COLUMN `buy_price` `buy_price` decimal(10,2) NOT NULL;'));
}
Run Code Online (Sandbox Code Playgroud)
另外,在down方法中只需设置旧值,这样您就可以roll-back:
public function down()
{
// Change db_name and table_name
DB::select(DB::raw('ALTER TABLE `db_name`.`table_name` CHANGE COLUMN `buy_price` `buy_price` decimal(5,2) NOT NULL;'));
}
Run Code Online (Sandbox Code Playgroud)
然后照常从terminal/command promptusing迁移php artisan migrate。
| 归档时间: |
|
| 查看次数: |
5982 次 |
| 最近记录: |