向现有实体添加主键,该实体对Symfony中的两个字段具有唯一约束



我有一个现有的Symfony实体:

/**
* MyAppAppBundleEntityUserSelection
*
* @ORMTable(name="user_selection",uniqueConstraints={@ORMUniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORMEntity(repositoryClass="MyAppAppBundleEntityUserSelectionRepository")
*/
class UserSelection
{
/**
* @var integer $userId
* @ORMId
* @ORMColumn(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORMId
* @ORMColumn(name="selection_id", type="integer")
*/
private $selectionId;
}

我正在尝试重构一些代码,当运行时

php app/console generate:doctrine:form MyAppAppBundle:UserSelection

我得到

表单生成器不支持具有多个主键的实体类。

。。。这是可以理解的(谢谢)。按原样使用实体并手动创建表单类型可以吗?还是在实体中输入一个id字段更好?如果我这样做,什么具体的配置是最好的?

例如

/**
* MyAppAppBundleEntityUserSelection
*
* @ORMTable(name="user_selection",uniqueConstraints={@ORMUniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORMEntity(repositoryClass="MyAppAppBundleEntityUserSelectionRepository")
*/
class UserSelection
{
/**
* @var integer $id
* @ORMColumn(name="id", type="integer")
* @ORMGeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var integer $userId
* @ORMId
* @ORMColumn(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORMId
* @ORMColumn(name="selection_id", type="integer")
*/
private $selectionId;
}

产生错误

有一个复合标识符,但使用了一个ID生成器,而不是手动分配(Identity,Sequence)。不支持此操作。

如果我做

/**
* MyAppAppBundleEntityUserSelection
*
* @ORMTable(name="user_selection",uniqueConstraints={@ORMUniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORMEntity(repositoryClass="MyAppAppBundleEntityUserSelectionRepository")
*/
class UserSelection
{
/**
* @var integer $id
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var integer $userId
* @ORMColumn(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORMColumn(name="selection_id", type="integer")
*/
private $selectionId;
}

当我运行结果转储sql时

ALTER TABLE user_selection ADD PRIMARY KEY (id);

我得到

密钥"PRIMARY"的重复条目"0">

那么,就最佳实践而言,如何继续?

更新

所以我可以做到这一点,但这需要两个步骤。首先,创建$id列

/**
* @ORMColumn(type="integer")
*/
private $id;

运行ALTER TABLE user_selection ADD id INT NOT NULL;

然后,按照这个顺序,

/**
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="AUTO")
* @ORMId
*/
private $id;

哪个产生ALTER TABLE user_selection CHANGE id id INT AUTO_INCREMENT NOT NULL, ADD PRIMARY KEY (id);

有没有一种方法可以将其结合起来,以便在对实体进行更改后只需要一个dump-sql命令?

UUID默认情况下不是整数值,所以您的实体应该看起来像这个

/**
* MyAppAppBundleEntityUserSelection
*
* @ORMTable(name="user_selection",uniqueConstraints={@ORMUniqueConstraint(name="unique", columns={"user_id", "selection_id"})})
* @ORMEntity(repositoryClass="MyAppAppBundleEntityUserSelectionRepository")
*/
class UserSelection
{
/**
* @ORMColumn(type="guid")
* @ORMId
* @ORMGeneratedValue(strategy="UUID")
*/
private $id;
/**
* @var integer $userId
* @ORMColumn(name="user_id", type="integer")
*/
private $userId;
/**
* @var integer $selectionId
* @ORMColumn(name="selection_id", type="integer")
*/
private $selectionId;
}

相关内容

  • 没有找到相关文章

最新更新