Tôi đã tạo một bảng bằng cách di chuyển như thế này:
public function up()
{
Schema::create('despatch_discrepancies', function($table) {
$table->increments('id')->unsigned();
$table->integer('pick_id')->unsigned();
$table->foreign('pick_id')->references('id')->on('picks');
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->integer('original_qty')->unsigned();
$table->integer('shipped_qty')->unsigned();
});
}
public function down()
{
Schema::drop('despatch_discrepancies');
}
Tôi cần thay đổi bảng này và bỏ tham chiếu khóa ngoại & cột pick_detail_id
và thêm một cột varchar mới được gọi là sku
sau pick_id
cột.
Vì vậy, tôi đã tạo một quá trình di chuyển khác, trông giống như sau:
public function up()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->dropForeign('pick_detail_id');
$table->dropColumn('pick_detail_id');
$table->string('sku', 20)->after('pick_id');
});
}
public function down()
{
Schema::table('despatch_discrepancies', function($table)
{
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
$table->dropColumn('sku');
});
}
Khi chạy quá trình di chuyển này, tôi gặp lỗi sau:
[Illuminate \ Database \ QueryException]
SQLSTATE [HY000]: Lỗi chung: 1025 Lỗi khi đổi tên của './dev_iwms_reboot/despatch_discrepancies' to './dev_iwms_reboot/#sql2-67c-17c464' (errno: 152) (SQL: alter tabledespatch_discrepancies
thả khóa ngoại pick_detail_id)[PDOException]
SQLSTATE [HY000]: Lỗi chung: 1025 Lỗi khi đổi tên của './dev_iwms_reboot/despatch_discrepancies' thành './dev_iwms_reboot/#sql2-67c-17c464' (errno: 152)
Khi tôi cố gắng đảo ngược quá trình di chuyển này bằng cách chạy php artisan migrate:rollback
lệnh, tôi nhận được một Rolled back
thông báo, nhưng nó không thực sự làm bất cứ điều gì trong cơ sở dữ liệu.
Bất cứ ý tưởng những gì có thể là sai? Làm thế nào để bạn bỏ một cột có tham chiếu khóa ngoại?