为symfony2/doctrine在现有实体中添加唯一令牌列的正确迁移路径

为symfony2/doctrine在现有实体中添加唯一令牌列的正确迁移路径,symfony,doctrine-orm,Symfony,Doctrine Orm,我想向现有客户实体添加一个新的唯一令牌列 我知道我需要更改customer类,更新模式,为每个客户创建唯一的令牌 这在dev中很容易,因为我只需从数据库中擦除数据并开始新的操作。但我不能在生产数据库上这样做 那么,做出这种改变的正确或适当的方法是什么 以下是我对Customer.php的更改: /** * Customer * * @ORM\Table() * @ORM\Entity(repositoryClass="AppBundle\Entity\CustomerRepository

我想向现有客户实体添加一个新的唯一令牌列

我知道我需要更改customer类,更新模式,为每个客户创建唯一的令牌

这在dev中很容易,因为我只需从数据库中擦除数据并开始新的操作。但我不能在生产数据库上这样做

那么,做出这种改变的正确或适当的方法是什么

以下是我对Customer.php的更改:

/**
 * Customer
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="AppBundle\Entity\CustomerRepository")
 * @UniqueEntity("urlToken")
 */
class Customer
{

...

/**
 * @var string
 *
 * @ORM\Column(name="urlToken", type="string", unique=true)
 */
private $urlToken;

在生产环境中部署架构更改的正确方法是使用

1) 修改实体类

2) 生成原则迁移:

$ ./doctrine migrations:diff 
3) 如有必要,更新条令代理类:

$ ./doctrine orm:generate:proxies
4) 在生产环境中执行迁移:

$ ./doctrine migrations:migrate

您正在询问如何在生产环境中继续,但最终您可以修改生产数据库,对吗?是的,我可以更改生产数据库。我只想在完成开发后再做,并且要快速、干净地完成开发。:)是的,但问题是列的唯一性。如何创建一个唯一的列,在迁移中使用唯一的数据和所有唯一的限制?因此,当执行migrations:diff时,将创建一个新的迁移类来更新数据库架构。您可以根据需要扩展或修改迁移类。另外,您还可以看看:默认迁移不起作用,因为列中的值不是唯一的。但是我添加了$this->addSql('updatecustomerseturltoken=uuid()');在创建唯一索引之前创建了唯一值。谢谢。另外,对于使用Symfony2的用户,请使用