使用ArrayCollection字段更新doctrine实体

时间:2016-11-22 02:36:24

标签: doctrine-orm symfony arraycollection symfony-3.1

我有关系更新实体的问题(一对多,多对一)。我试图在更新时向ArrayCollection添加一些新元素,但无所事事。 这是我创建和添加关系的代码:

$auctionPhoto = new AuctionPhoto();
$auctionPhoto->setAuction($auction);
$auctionPhoto->setPath($path);
$auction->getPhotos()->add($auctionPhoto);

全部由doctrine实体监听器(preUptade)运行。

当我创建实体(prePersist)时会执行相同的代码。

我调试了这个并且在持续之前我在Auction对象中有正确的关系,但没有任何保存到数据库。

3 个答案:

答案 0 :(得分:2)

你为什么要$auction->getPhotos()->add($auctionPhoto)

您的addPhoto()实体中应该有方法addAuctionPhoto()Auction,并按照以下方式使用:

$auction->addPhoto($auctionPhoto)$auction->addAuctionPhoto($auctionPhoto)

修改

也许您的实体Auction不是两个实体之间关系的所有者,那么您需要添加$auctionPhoto->setAuction($auction),或者如果它是ManyToMany关系,则添加$auctionPhoto->addAuction($auction)

答案 1 :(得分:1)

$auction->getPhotos()->add($auctionPhoto);替换为$auction->addPhoto($auctionPhoto);

Auction实体中,定义新方法

// Auction.php
public function addPhoto(AuctionPhoto $thePhoto)
{
    $this->photos[] = $thePhoto; // Add the photo to the object
    $thePhoto->setAuction($this); // AuctionPhoto entity need to know about the reference

    return $this; // Just for method chaining
}

(我假设$photos是包含拍卖照片的ArrayCollection)

基本上你错过的是给你的实体一个参考: $thePhoto->setAuction($this);

答案 2 :(得分:0)

在运行此命令之前,您是否说数据库中没有任何内容:

$em->persist($auction);
$em->flush();

如果是这样,那就是正确的功能。你需要保持然后刷新,然后存储数据。