我有一個現有的Symfony實體:添加一個主鍵,以現有的實體在Symfony的
/**
* MyApp\AppBundle\Entity\UserSelection
*
* @ORM\Table(name="user_selection",uniqueConstraints={@ORM\UniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORM\Entity(repositoryClass="MyApp\AppBundle\Entity\UserSelectionRepository")
*/
class UserSelection
{
/**
* @var integer $userId
* @ORM\Id
* @ORM\Column(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORM\Id
* @ORM\Column(name="selection_id", type="integer")
*/
private $selectionId;
}
我試圖重構一些代碼和運行
php app/console generate:doctrine:form MyAppAppBundle:UserSelection
時
我得到
表單生成器不支持包含多個主鍵的實體類。
......這是可以理解的(thanks)。按原樣使用實體並手動創建表單類型是否正常?或者在實體中放置一個id字段更好?如果我這樣做,什麼樣的配置最好?
例如
/**
* MyApp\AppBundle\Entity\UserSelection
*
* @ORM\Table(name="user_selection",uniqueConstraints={@ORM\UniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORM\Entity(repositoryClass="MyApp\AppBundle\Entity\UserSelectionRepository")
*/
class UserSelection
{
/**
* @var integer $id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var integer $userId
* @ORM\Id
* @ORM\Column(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORM\Id
* @ORM\Column(name="selection_id", type="integer")
*/
private $selectionId;
}
產生錯誤
具有複合標識符,但使用了比手動分配(標識,序列)以外的ID發生器。這不支持。
然後,如果我做
/**
* MyApp\AppBundle\Entity\UserSelection
*
* @ORM\Table(name="user_selection",uniqueConstraints={@ORM\UniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORM\Entity(repositoryClass="MyApp\AppBundle\Entity\UserSelectionRepository")
*/
class UserSelection
{
/**
* @var integer $id
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var integer $userId
* @ORM\Column(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORM\Column(name="selection_id", type="integer")
*/
private $selectionId;
}
當我運行生成的轉儲-SQL
ALTER TABLE user_selection ADD PRIMARY KEY (id);
我得到
重複條目 '0' 鍵 'PRIMARY'
因此,就最佳實踐而言,進行的方式是什麼?
更新
所以我可以做這個工作,但它需要兩個步驟。首先,創建一個$ id列
/**
* @ORM\Column(type="integer")
*/
private $id;
運行ALTER TABLE user_selection ADD id INT NOT NULL;
然後,按以下順序,
/**
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Id
*/
private $id;
將會產生ALTER TABLE user_selection CHANGE id id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);
有沒有辦法讓所有的結合這在對實體的更改是單個dump-sql命令之後所需要的?
如果你在2D解決方案使用自動增量ID而不是UUID之一?看來ALTER不起作用,因爲它不知道哪個UUID對現有記錄有影響。 (你也可以嘗試添加一個簡單的「id」列,用UUID填充它,然後修改表格以使用它作爲主鍵) – Veve
@Veve我試過並得到「只能有一個自動列,它必須是定義爲一個關鍵「。然而,它似乎填充正確,有些時候我正在嘗試各種配置...我會嘗試複製它 – Windowpane
@Veve是我可以使它工作,但它需要兩個步驟 – Windowpane