2013-10-17 52 views
0

我有ApparelUser類。每個user可以有許多apparels。而apparel可以只屬於一個UserSymfony - 創建新對象而不是更新

class Apparel 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="apparels", cascade={"persist"}) 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    private $user;  
} 


class User 
{ 
    /** 
    * @ORM\OneToMany(targetEntity="Apparel", mappedBy="user") 
    */ 
    private $apparels; 
} 

的問題是,新用戶被添加到數據庫時,我更新。

  • 我的代碼有什麼問題?

這裏是我的控制器

$user = $this->get('session')->get('user'); 
$apparel->setUser($user); 
$entityManager = $this->getDoctrine()->getManager(); 
$entityManager->persist($apparel); 
$entityManager->flush(); 

enter image description here

+0

這是整個控制器或只是它的一部分?我們需要看看你是如何實例化'$ apparel'還是進行數據庫查找。 –

+0

它只是控制器的一部分 –

回答

1

我的猜測是,正在創建一個新用戶的原因是因爲您正在使用沒有被教條所管理的對象工作並可能允許級聯創建。

所以,我的建議是得到了會議的用戶ID和嘗試,

$user = $userRepository->find($userId) 

,然後調用,

$apparel->setUser($user); 
+0

它不起作用,因爲我登錄後將我的用戶寫入會話。 $ session = $ this-> get('session'); \t \t \t \t $ session-> set('user',$ user); –

+0

然後,在調用'$ apparel-> setUser($ user)'之前,您需要從數據庫中檢索用戶對象。我的猜測是,創建新用戶的原因是因爲您正在處理一個不受Doctrine管理的對象,並且可能允許創建級聯。 所以我的建議是從會話中獲取用戶ID並嘗試'$ user = $ userRepository-> find($ userId)' –

+0

謝謝我會嘗試它。 –

相關問題