2016-11-22 23 views
-2

我有关系更新实体(一对多,多对一)的问题。我试图在更新时向ArrayCollection添加一些新元素,但没有做任何事情。 这是我创建并添加关系码:使用ArrayCollection字段更新原则实体

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

全部由学说实体监听器(preUptade)运行。当我创建实体(prePersist)时,相同的代码是做的,但后来工作正常。

我调试这个和之前坚持我有拍卖对象的权利关系,但没有任何保存到数据库。

回答

0

你说什么是数据库运行在此之前:

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

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

+0

不,这不是这个。其他领域的拍卖,如标题保存。正如我所说,这与创建操作中的代码相同,但创建作品。 – Jacek

2

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

你应该在你的Auction实体的方法addPhotoaddAuctionPhoto,并使用它像这样:

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

编辑:

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

+0

我没有。应该如何看起来像这种方法? – Jacek

+0

里面的方法,你应该有'$ this-> photos-> add($ auctionPhoto)'。与这两种方法的不同之处在于'$ auction-> getPhotos()'返回的数组与图片的值相同,而不是您的照片的名称attribut – progg

+0

下一次,用 'php bin/console doctrine:生成:实体AppBundle/Entity/YourEntity' Doc:http://symfony.com/doc/current/doctrine.html#generating-getters-and-setters – progg

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

相关问题