0

manytooneに関連するユーザーとグループがあり、取得しているユーザーで使用されているグループを削除します。

DBALException:'DELETE FROM Groups WHERE id =?'の実行中に例外が発生しました with params ...整合性制約違反:1451親行を削除または更新できません:外部キー制約が失敗します...

DBALException:'DELETE FROM Groups WHERE id =?'の実行中に例外が発生しました with params ...整合性制約違反:1451親行を削除または更新できません:外部キー制約が失敗します

...そしてそれは正常です、どうすれば例外をキャッチできますか、またはそれが何らかの形で使用されているかどうかを確認できますか?

4

3 に答える 3

0

データベース レベルで句を使用する以外にON DELETE(これは明らかにエレガントでフレームワークに依存しない方法です)、グループの既存のユーザーをコード内で直接確認したい場合があります。この場合、別のクエリを実行できます。

$em = $this->getDoctrine()->getEntityManager();

// Set your group id as the desired criterion
$criteria = array('GroupId' => $group->getId);

// Get all users that match the criterion
$users = $em->getRepository("YourBundle:User")->findBy($criteria);

// Check whether the returned array is empty
if(count($users) != 0){
    // Do your exception handling
}else {
    // Do regular operations, like deleting the group
}
于 2012-11-21T19:40:55.160 に答える
0

グループを削除するときにグループ内のすべてのユーザーを削除したい場合は、doctrine に削除をカスケードするように指示できます。したがって、メタデータ ファイル (groups.orm.yml など) の oneToMany セクションは次のようになります。

oneToMany:
    users:
        targetEntity: Users
        mappedBy: user
        cascade: [remove]

詳細はこちらhttp://docs.doctrine-project.org/en/2.0.x/reference/working-with-associations.html#transitive-persistence-cascade-operations

于 2012-11-22T06:36:32.537 に答える
0

これは、次のように、おそらくデータベースに外部キーを設定していることを意味します。

|---------|
| User    |
|---------|
| id      |
| groupId |
|---------|

|-------|
| Group |
|-------|
| id    |
|-------|

User.groupId参照しGroup.idます。これは、グループを削除するときに、そのグループの一部であるユーザーに対してデータベースが何をすべきかを定義する必要があることを意味します。

意図に応じて、この状況を処理するために外部キー制約を変更できます。使用しているデータベースの種類については言及していませんでしたが、MySQL ではCONSTRAINTwithON DELETE句を使用して、RESTRICT(デフォルト、現在表示されているもの)、CASCADE(関連するすべてのユーザーを削除する) のオプションを指定できることを知っています。 )、およびSET NULL(グループが削除されたユーザーの場合は に設定)groupIdNULL

于 2012-11-21T18:52:01.493 に答える