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