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();
}
}
関連記事
- 標準のHelperを拡張してカスタマイズする方法
- 国際化i18n(多言語化)
- 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サーバに接続できるかどうかを確認する
- CakePHP2系の入手方法・インストール方法
- PDO_MYSQLをインストールする方法
- PostgreSQLのインストール
- 『Table is marked as crashed and should be repaired』の修復方法
- EC-CUBEのサーバ移行の方法
- CakePHPのエラーテンプレートの一覧
- Zend_DBの基本
- CakePHP1系(CakePHP1.3)をPHP7・PHP8以降に対応させる方法
- symfonyのORマッパ(Propel、Doctrine)
- yumのius(iuscommunity.org)でエラーが出る場合
- 文字列型(データ型)のまとめ
- 個体識別情報・UIDの取得方法
- CakePHP5系の入手方法・インストール方法
- 数値型(データ型)のまとめ
- phpMyAdminで『information_schema』などを非表示にする方法
- WindowsでMySQLを再起動する方法
- CakePHP、Symfony、Zend Frameworkの比較
スポンサーリンク