2012-05-18 35 views
0

我得到這個錯誤時的錯誤:Symfony2的:保存一個一對多的關係

Integrity constraint violation: 1048 Column 'user_id' cannot be null

當我嘗試保存用戶與我的控制器的地址:

$em = $this->getDoctrine()->getEntityManager(); 
    $user=new User();  
    $adr=new Address(); 
    $user->getAddresses()->add($adr); 
    /* i add something missing here */ 
    $form =$this->createForm(new UserForm(),$user); 

    if ('POST' == $request->getMethod()) { 
     $form->bindRequest($request); 
     if ($form->isValid()) {    
      $em->persist($user); 
      $em->flush(); 
      return $this->redirect($this->generateUrl('homepage')); 
     } 
    } 

好,這些都是我的實體類,用戶和地址:

public class User { 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var Address 
    * 
    * @ORM\OneToMany(targetEntity="Address", mappedBy="user", cascade={"all"}) 
    * @ORM\OrderBy({"zipCode" = "ASC"}) 
    */ 
    protected $addresses; 
} 

public class Address{ 
     /** 
    * @var User 
    * 
    * @ORM\ManyToOne(targetEntity="User",inversedBy="addresses") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
    * }) 
    */ 
    private $user; 
} 

在窗體類:

$builder->add('addresses', 'collection', array('type' => new AddressForm())); 

在日誌中,有這樣一條消息:

INSERT INTO user (email, password, salt, is_active, username, description, user_type_id,partner_type_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?){"1":"[email protected]","2":"ttttt","3":null,"4":null,"5":null,"6":"sdfadf","7":3,"8":9}) 

當它試圖保存地址:

INSERT INTO address (Number, voie_name, additional_address, zip_code, city, cedex, created_at, tel, loc_lat, loc_lng, voie_id, user_id) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ({"1":"12","2":"asdf","3":"sdfasdf","4":"69001","5":"Lyon 1er","6":null,"7":null,"8":"04 65 46 46 54","9":null,"10":null,"11":4,"12":null}) 

注重"12":null,這是奇怪,因爲教義已保存的用戶。

回答

0

不知道,也許嘗試:

public class Address{ 
    /** 
* @var User 
* 
* @ORM\ManyToOne(targetEntity="User",inversedBy="addresses", cascade={"all"}) 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
* }) 
*/ 
private $user; 
} 

或嘗試添加到您的用戶實體:

public function setAddresses($Addresses){ 
    foreach($Addresses as $Address){ 
     $User->setAddress($this); 
    } 

} 
+0

不能添加CASCAD = { 「所有」}在地址類,原因刪除地址甚至所有的地址並不意味着我們需要刪除用戶。此外,也許你犯了一個錯誤,在用戶實體中,我將設置:$ Address-> setUser($ this); – ferdinandfly