ฉันได้สร้างตารางโดยใช้การโยกย้ายดังนี้:
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');
}
ฉันต้องการเปลี่ยนตารางนี้และวางการอ้างอิงและคอลัมน์ Foreign Key pick_detail_id
และเพิ่มคอลัมน์ varchar ใหม่ที่เรียกว่าsku
after pick_id
column
ฉันได้สร้างการย้ายข้อมูลอีกครั้งซึ่งมีลักษณะดังนี้:
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');
});
}
เมื่อฉันเรียกใช้การย้ายข้อมูลนี้ฉันได้รับข้อผิดพลาดต่อไปนี้:
[Illuminate \ Database \ QueryException]
SQLSTATE [HY000]: ข้อผิดพลาดทั่วไป: 1025 ข้อผิดพลาดในการเปลี่ยนชื่อของ './dev_iwms_reboot/despatch_discrepancies' เป็น './dev_iwms_reboot/#sql2-67c-17c464' (errno: 152) (SQL: alter tabledespatch_discrepancies
วางคีย์ต่างประเทศ pick_detail_id)[PDOException]
SQLSTATE [HY000]: ข้อผิดพลาดทั่วไป: ข้อผิดพลาด 1025 ในการเปลี่ยนชื่อของ "./dev_iwms_reboot/despatch_discrepancies 'เป็น' ./dev_iwms_reboot/#sql2-67c-17c464 '(errno: 152)
เมื่อฉันพยายามย้อนกลับการย้ายข้อมูลโดยเรียกใช้php artisan migrate:rollback
คำสั่งฉันได้รับRolled back
ข้อความ แต่มันไม่ได้ทำอะไรเลยในฐานข้อมูล
มีความคิดอะไรผิดหรือเปล่า? คุณวางคอลัมน์ที่มีการอ้างอิงคีย์ต่างประเทศได้อย่างไร