0

このエラーが発生します:

整合性制約違反:1048列'user_id'を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":"test@yahoo.ca","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":nullDoctrineがすでにユーザーを救ったので、注意してください。

4

1 に答える 1

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

}
于 2012-05-18T21:54:13.450 に答える