2012-12-13 85 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