2012-12-13 86 views
0

我有两个实体:门票和类别OneToOne关系,并设置实体

class tickets 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 
... 
    /** 
    * @ORM\OneToOne(targetEntity="categories", mappedBy="ticket") 
    */ 
    private $categories; 

public function setCategories($categories) 
    { 
     $this->categories= $categories; 
    } 

    public function getCategories() 
    { 
     return $this->categories; 
    } 
} 

class categories 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var integer $id_ticket 
    * 
    * @ORM\Column(name="id_ticket", type="integer") 
    */ 
    private $id_ticket; 
... 
    /** 
    * @ORM\OneToOne(targetEntity="tickets", inversedBy="categories") 
    * @ORM\JoinColumn(name="id", referencedColumnName="id_ticket") 
    */ 
    private $ticket; 

public function setTicket() 
    { 
     $this->ticket= $ticket; 

    } 
public function getTicket() 
    { 
     return $this->ticket; 
    } 

在我的票控制器,当我创建一个新的票,我想创建一个新的类别,其中tickets.id = categories.id_ticket

$ticket= new tickets(); 
$category= new categories(); 
$ticket->setCategories($categories); 
$em->persist($categories); 
$em->persist($ticket); 
$em->flush(); 

我得到这个错误:

SQLSTATE[23000]: [Microsoft][SQL Server Native Client 10.0][SQL Server]Cannot insert explicit value for identity column in table 'categories' when IDENTITY_INSERT is set to OFF.

并尝试做插入的是:

INSERT INTO categories(id_ticket, ... , **id**) VALUES (?, ..., **?**) 
Parameters: { 1: 'null', ..., **18: 'null'** } 

我在做什么错?我不知道它为什么要插入“id”。我知道这就是我得到这个错误的原因,但我是symfony2和doctrine的新手,我不知道如何解决它。

+4

顺便说一句,你的类应该叫'Ticket'和'Category'。 – moonwave99

+0

谢谢。那就对了。 – xlaudrup

回答

1

你必须与拥有方有问题(看here

尝试:

$ticket= new tickets(); 
$category= new categories(); 
$categories->setTicket($ticket); 
$em->persist($ticket); 
$em->persist($categories); 
$em->flush(); 
+0

谢谢!我还必须添加persist:* @ORM \ OneToOne(targetEntity =“tickets”,inversedBy =“categories”,cascade = {“persist”}“) – xlaudrup