2011-05-25 4 views
1

J'ai deux entitéscomportement en cascade étrange Doctrine2

TB\Entity\UserProfile 
/** 
* @OneToMany(targetEntity="TB\Entity\ShopVideo", mappedBy="shop", 
* cascade={"persist", "remove"} 
*) 
*/ 
private $video;  

et TB \ Entité \ ShopVideo

/** 
* @var UserProfile 
* 
* @ManyToOne(targetEntity="TB\Entity\UserProfile") 
* @JoinColumns({ 
* @JoinColumn(name="shop", referencedColumnName="id") 
* }) 
*/ 
private $shop; 

Si je crée une instance UserProfile et une instance ShopVideo comme si

$profile = new TB\Entity\UserProfile(); 
    $model = new TB\Entity\ShopVideo(); 

    $profile->getShopVideo()->add($model); 
    $this->_em->persist($profile); 
    $this->_em->flush(); 

Je m'attendrais à ce que la colonne 'shop' soit remplie avec l'identifiant de 'UserProfile' (et d'autres modèles cela a fonctionné) ... Cependant, je reçois l'erreur (en raison de contraintes de clés étrangères)

PDOException: SQLSTATE [23000]: Intégrité violation de contrainte: 1048 Colonne 'shop' ne peut pas être nul

/Users/ABCD/work/TB/TB/library/Doctrine/DBAL/Statement.php:131 
/Users/ABCD/work/TB/TB/library/Doctrine/ORM/Persisters/BasicEntityPersister.php:226 
/Users/ABCD/work/TB/TB/library/Doctrine/ORM/UnitOfWork.php:698 
/Users/ABCD/work/TB/TB/library/Doctrine/ORM/UnitOfWork.php:280 
/Users/ABCD/work/TB/TB/library/Doctrine/ORM/EntityManager.php:328 

I juste ne comprends pas pourquoi le ShopVideo ne cascadant pas l'opération et la définition de la colonne de la boutique avec l'id de l'USerProfile? Toute aide serait appréciée!

Répondre

0

Sur votre @ManyToOne, essayez d'ajouter inversedBy = "video". Cela peut ou non résoudre ce problème, mais c'est une propriété obligatoire dans le cas d'associations bidirectionnelles.