1

私はこのrekationで次のエンティティを持っています:

/**
* Acme\DemoBundle\Entity\Book
*
* @ORM\Table(name="book")
* @ORM\Entity(repositoryClass="Acme\DemoBundle\Repository\BookRepository")  
* @ORM\HasLifecycleCallbacks  
* @UniqueEntity(fields="publickey", groups={"publickey"})
*/
class P1guestlistentry {
/**
 * @var P1guestlistentrystatistic
 *
 * @ORM\OneToOne(targetEntity="P1guestlistentrystatistic", orphanRemoval=true, cascade={"all"}, fetch="EAGER")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="fkstatistic", referencedColumnName="pkId", nullable=false)
 * })
 */
private $fkstatistic;

ここのようにオブジェクトを削除しようとすると:

$this->getEntityManager()->getConnection()->beginTransaction();
try{

     $book = $this->getEntityManager()->getRepository('AchmeDemoBundle:Book')->find(3928);
     $this->getEntityManager()->remove($book);
     $this->getEntityManager()->flush();
     $this->getEntityManager()->getConnection()->commit();         
   }catch(Exception $e){
     $this->getEntityManager()->getConnection()->rollBack();
     echo $e->getMessage();
   }
exit;

やりたいことは何でもできますが、次のエラーが表示されます。

「DELETE FROM book WHERE pkId = ?」の実行中に例外が発生しました with params {"1":3928}: SQLSTATE[23000]: 整合性制約違反: 1451 親行を削除または更新できません: 外部キー制約が失敗しました ( p1. book, CONSTRAINT FK_F51A442F78734022FOREIGN KEY ( fkstatistic) REFERENCES bookstatistic( pkId))

誰かが私が間違っていることを知っていますか? 多くの方法を試しましたが、何も役に立ちません。

4

1 に答える 1

2

誰かが同様の問題に遭遇した場合の解決策は次のとおりです。

/**
 * @var statistic
 *
 * @ORM\OneToOne(targetEntity="statistic", cascade="ALL")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="fkStatistic", referencedColumnName="pkId", onDelete="SET NULL")
 * })
 */

このonDeleteオプションは最初にリレーションを削除し、次に doctrine がカスケード操作を行います。

于 2013-02-12T12:21:57.400 に答える