sfGuardUser モデルと関係のある sfGuardUserProfile モデルを作成しました。次に、sfGuardUserProfile に関連する別のモデルを定義します。データベースを作成するときにエラーは発生しませんが、アクション ファイルの sfGuardUserProfile にデータを保存しようとすると、次のエラーが発生します。
SQLSTATE [23000]: 整合性制約違反: 1452 子行を追加または更新できません: 外部キー制約が失敗しました
私の schema.yml では、関係を 1 対 1 として定義しています。
なぜこれが失敗するのかわかりません。Doctrine は、すでに関係を持つモデルに新しい関係を追加することを単にサポートしていないのでしょうか?
編集 これが私のschema.ymlです:
sfGuardUserProfile:
tableName: sf_guard_user_profile
columns:
sf_guard_user_id: { type: integer(4) }
email: { type: string(255) }
relations:
User:
class: sfGuardUser
type: one
foreignType: one
onDelete: CASCADE
local: sf_guard_user_id
foreign: id
foreignAlias: Profile
FacebookAccount:
tableName: facebook_account
columns:
user_id: { type: integer(4) }
page_id: { type: integer }
relations:
sfGuardUserProfile:
type: one
foreignType: one
class: sfGuardUserProfile
local: user_id
foreign: sf_guard_user_id
onDelete: CASCADE
foreignAlias: FacebookAccount
これを行うと、次のエラーが発生します。
$profile = $this->getUser()->getProfile();
$profile->setEmail('someone@somewhere.com');
$profile->save();
生成された SQL:
INSERT INTO sf_guard_user_profile (sf_guard_user_id, email) VALUES (?, ?) - (1, someone@somewhere.com)
正確なエラー:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`site`.`sf_guard_user_profile`, CONSTRAINT `sf_guard_user_profile_sf_guard_user_id_facebook_account_user_id` FOREIGN KEY (`sf_guard_user_id`) REFERENCES `facebook_account` (`user_id`))