使用ArrayCollection字段更新doctrine实体

问题描述 投票:-2回答:3

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

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

全部由doctrine实体监听器(preUptade)运行。我创建实体(prePersist)时会执行相同的代码,但之后工作正常。

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

doctrine-orm symfony arraycollection symfony-3.1
3个回答
2
投票

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

你应该在你的addPhoto()实体中有一个方法addAuctionPhoto()Auction,并像这样使用它:

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

编辑:

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


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);


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.