奇怪的级联行为Doctrine2

时间:2011-05-25 16:02:34

标签: doctrine-orm

我有两个实体

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

和 TB \实体\ ShopVideo

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

如果我这样创建一个UserProfile实例和一个ShopVideo实例

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

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

我希望'shop'列可以填充'UserProfile'的id(以及其他有效的模型)......但是我得到错误(由于外键限制)

PDOException:SQLSTATE [23000]:完整性约束违规:1048列“shop”不能为null

/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

我只是不明白为什么ShopVideo没有级联操作并使用USerProfile的id设置shop列?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

在你的@ManyToOne上尝试添加inversedBy =“video”。这可能会也可能不会解决此问题,但在双向关联的情况下,它是必需的属性。