Symfony2,手动分配表id值

时间:2012-02-25 16:29:23

标签: symfony

我正在使用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;
}

1 个答案:

答案 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);