Seedの実行順(外部キー制約などを先に実行させる方法) Foreign key violation
Seedは通常はファイル名の順に実行されます。
実行させたい順が決まっている場合、
A01Seed.php クラス名A01Seed
A02Seed.php クラス名A02Seed
……
…
のようにすると、名前順に実行されます。
(class名は数字で始めることはできない)
Seedの実行順によっては外部キー制約などで次のようなエラーが出ることがあります。
[PDOException] SQLSTATE[23503]: Foreign key violation: 7 ERROR: insert or update on table "users" violates foreign key constraint "users_role_id_fkey" DETAIL: Key (role_id)=(1) is not present in table "roles". in /cake/vendor/robmorgan/phinx/src/Phinx/Db/Adapter/PdoAdapter.php on line 335
外部キー制約を使用するなどして、Seedの実行順が決まっている場合はgetDependencies()メソッドで依存関係を指定すると先に外部キーのテーブルのSeedを実行させることができます。
Seedは名前順に実行されると定義されているわけではないので、外部キー制約がある場合はgetDependencies()メソッドを指定しておいたほうがいいです。
<?php
declare(strict_types=1);
use Migrations\AbstractSeed;
/**
* Users seed.
*/
class UsersSeed extends AbstractSeed
{
/**
* Return seeds dependencies.
*
* @return array
*/
public function getDependencies()
{
return [
'UserRoles',
];
}
/**
* Run Method.
*
* @return void
*/
public function run()
{
$data = [
[
'id' => 1,
'email' => 'test@example.com',
'name' => 'テスト太郎',
'user_role_id' => 1,
],
[
'id' => 2,
'email' => 'hoge@example.com',
'name' => 'ほげほげ',
'user_role_id' => 2,
],
];
$table = $this->table('users');
$table->insert($data)->save();
}
}
関連記事
- URLをハイフン区切りからアンダーバー(アンダースコア)区切りにする方法
- CakePHP4系の入手方法・インストール方法
- Composerコマンドでウクライナへのメッセージが表示されたことがあります
- Composerをインストールする方法と使い方
- コーディング規約のチェックを行う・整形する標準ツール(PHP CodeSniffer)の使い方
- Seedを実行した後にシーケンスを更新する方法(duplicate key valueエラー)
- SQLクエリー(SQL文)を直接実行する方法
- PostgreSQLでERROR: duplicate key value violates unique constraint "hoge_pkey" DETAIL: Key (id)=(10) already exists.と出る場合
- PostgreSQLで自動採番をするシーケンス(sequence)とは【AUTO INCREMENT】
- Apacheで所有権や書き込み権限があるにも関わらずPermissions deniedが出る場合
- CakePHP3
- CakePHP
- MySQL MariaDB
- PostgreSQL
- データベースを定時バックアップする方法(毎日バックアップする処理)
- MySQL関数のまとめ
- MySQLでランダムな数字を得る方法
- CakePHP5系の入手方法・インストール方法
- Beep音を無効にする
- action名にlistは使えない listを使う方法
- TOPページはIndexControllerではない Cannot redeclare config()
- Zend_DBの基本
- iusリポジトリで公開されているパッケージの一覧
- AuthコンポーネントのパスワードをCakePHPを使用せずハッシュ化する方法(パスワードの生成ルール)
- 数値型(データ型)のまとめ
- CakePHPのDB接続情報設定
- Zend Frameworkのデータベース接続
- EC-CUBE2系で商品を大量にカートに入れると注文情報が抜けたりカートが消えたりする
- MySQLのソケットエラー
- Got a packet bigger than 'max_allowed_packet' bytes
- WindowsでMySQLを再起動する方法
- Windows MySQLインストール後の設定
- EC-CUBEのバックアップ機能とリストア
- WordPressのインストール
スポンサーリンク