[解決済み] 外部キーでカラムを削除する Laravelのエラーです。一般的なエラーです。1025 名前変更時のエラー
質問
このようなマイグレーションでテーブルを作成しました。
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');
}
このテーブルを変更し、外部キー参照 & カラムを削除する必要があります。
pick_detail_id
という新しいvarcharカラムを追加します。
sku
の後に
pick_id
のカラムになります。
そこで、別のマイグレーションを作成したところ、以下のようになりました。
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');
});
}
このマイグレーションを実行すると、以下のエラーが発生します。
[IlluminateDatabase QueryException] が発生しました。
sqlstate[hy000]: 一般的なエラー。1025 Error on rename of './dev_iwms_reboot/despatch_discrepancies' から './dev_iwms_reboot/#sql2-67c-17c464' にリネームされました (errno: 152) (SQL: alter tabledespatch_discrepancies
drop foreign key pick_detail_id)[PDOException]が発生しました。
sqlstate[hy000]: 一般的なエラーです。1025 Error on rename of './dev_iwms_reboot/despatch_discrepancies' から './dev_iwms_reboot/#sql2-67c-17c464' にリネームされました (errno: 152)
このマイグレーションを元に戻すために
php artisan migrate:rollback
コマンドを実行すると
Rolled back
メッセージを受け取りますが、実際にはデータベースで何もしていません。
何が間違っているのか、何か思い当たることはありますか?外部キー参照を持つ列をどのようにドロップするのでしょうか?
どのように解決するのですか?
それは、このように外部キーを作成すると判明しました。
$table->integer('pick_detail_id')->unsigned();
$table->foreign('pick_detail_id')->references('id')->on('pick_details');
Laravelはこのように外部キー参照に一意的な名前を付けます。
<table_name>_<foreign_table_name>_<column_name>_foreign
despatch_discrepancies_pick_detail_id_foreign (in my case)
したがって、外部キー参照を持つカラムを削除したい場合は、このようにする必要があります。
$table->dropForeign('despatch_discrepancies_pick_detail_id_foreign');
$table->dropColumn('pick_detail_id');
更新しました。
Laravel 4.2+では、新しい命名規則が導入されました。
<table_name>_<column_name>_foreign
関連
-
[解決済み】mysqli_result クラスのオブジェクトを文字列に変換できない
-
[解決済み】「セッションキャッシュリミッターを送信できません - ヘッダーはすでに送信されています」【重複】。
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
[解決済み] [Solved] Fatal error: 非オブジェクトのメンバ関数fetch_assoc()の呼び出し [重複]。
-
[解決済み] PHP - ストリームを開くのに失敗しました : そのようなファイルまたはディレクトリがありません。
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み] mysqli_fetch_assoc() は、パラメータ 1 が mysqli_result であることを期待し、boolean が与えられる [重複] 。
-
[解決済み] オートロードとは何ですか; spl_autoload、__autoload、spl_autoload_register はどのように使うのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コマンドの同期がとれていない。
-
[解決済み】PHP定数「PHP_EOL」はいつ使うの?
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】XAMPPのphpMyAdminで「設定にあるcontroluserの接続に失敗しました。
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み】既に開始されているPHPセッション【重複あり
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] PHP product.php?id=1 のような URL を作成する方法
-
[解決済み] libapache2-mod-php7 パッケージの場所がわからない
-
[解決済み] エラー1022 - 書き込みできません; テーブルに重複したキーがあります。