我正在使用symfony2,我有一个表,我想手动分配id。
在学说的文献中我发现了这个:
标识符生成策略
"NONE: Tells Doctrine that the identifiers are assigned (and thus generated)
by your code. The assignment must take place before a new entity is passed to
EntityManager#persist.
NONE is the same as leaving off the @GeneratedValue entirely."
请注意:“分配必须在新实体传递给En之前进行。”
我如何实现这一目标?
我这样做:
$empleado->setId("989865446");
但它说:
Entity of type Entity\Empleado is missing an assigned ID. The identifier
generation strategy for this entity requires the ID field to be populated before
EntityManager#persist() is called. If you want automatically generated
identifiers instead you need to adjust the metadata mapping accordingly.
编辑:
/**
* @var integer $id
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
*/
private $id;
和
public function setId($id)
{
$this->id = $id;
}
答案 0 :(得分:2)
您发布的代码是正确的,因此错误必须与您构建对象的方式以及何时调用persist()有关。
这里有一个类似的问题: Set value for the primay key with strategy set to NONE
您是否正在运行最新版本的Symfony 2 / Doctrine 2?
尝试使其成为上面答案中建议的必需构造函数参数 - 这将使得在设置ID之前无法调用persist()。错误消息意味着它所说的内容 - 您必须首先分配ID,仅呼叫持续存在。
您正在正常创建对象,对吗?你的代码应该是这样的(这里我展示了如何使用构造函数所需的ID,但它也应该与setId()方法一起使用):
$empleado = new Entity\Empleado("989865446");
//set other properties
$em->persist($empleado);