这是我的迁移:
public function up()
{
Schema::table('payments', function($table)
{
$table->dropColumn('invoice_id');
});
}
public function down()
{
Schema::table('payments',function (Blueprint $table){
$table->unsignedInteger('invoice_id')->index();
$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');
});
}当我运行php artisan migrate:rollback时,它给出了这个异常:
[Illuminate\Database\QueryException]
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`invoiceninja`.`#sq
l-418_46`, CONSTRAINT `payments_invoice_id_foreign` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE CASCADE) (SQL: alter
table `payments` add constraint `payments_invoice_id_foreign` foreign key (`invoice_id`) references `invoices` (`id`) on delete cascade)
[PDOException]
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`invoiceninja`.`#sq
l-418_46`, CONSTRAINT `payments_invoice_id_foreign` FOREIGN KEY (`invoice_id`) REFERENCES `invoices` (`id`) ON DELETE CASCADE) 有人能帮我吗?
发布于 2016-04-19 18:44:27
我假设您正在运行down方法。第一行:
$table->unsignedInteger('invoice_id')->index();添加回列,我不知道Laravel,但我猜这会为该列分配一个默认值0。
$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');如果引用的id列中没有0值,则会失败。
您可能可以通过允许invoice_id列为NULL并将其用作默认值来实现这一点。
我的第一步是检查新添加的列invoice_id中的值。
发布于 2016-04-19 18:45:59
我不确定为什么在down()方法中有这个逻辑,因为它通常是在up()中,但请尝试这样做:
public function down()
{
Schema::table('payments', function (Blueprint $table){
$table->unsignedInteger('invoice_id')->index();
});
Schema::table('payments', function (Blueprint $table){
$table->foreign('invoice_id')->references('id')->on('invoices')->onDelete('cascade');
});
}https://stackoverflow.com/questions/36715678
复制相似问题