2016-11-22 52 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);