-2

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

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

一切都由学说实体侦听器(preUptade)运行。当我创建实体(prePersist)时,会执行相同的代码,但随后可以正常工作。

我对此进行了调试,并且在坚持之前我在拍卖对象中拥有正确的关系,但没有保存到数据库中。

4

3 回答 3

2

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

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

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

编辑:

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

于 2016-11-22T08:37:39.043 回答
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);

于 2016-11-22T17:22:24.817 回答
0

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

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

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

于 2016-11-22T05:14:20.590 回答