我正在使用遗留数据库在Symfony2中开发一个项目,该数据库使用一个字符串来获得一个6位数的'franchisee_number',前面有浮动的0 - 例如。 000123.当我尝试刷新实体时,我收到一个错误,显示它试图执行的SQL语句,它甚至没有尝试插入以插入我的主键字段。直到刷新实体,'franchisee_id'出现在实体中,所以我假设Doctrine不想设置主键,但生成了它。
我的问题与此问题非常相似:when flush() primary key does not get inserted,但我已尝试列出的答案,但它们无效。
以下是我的实体为'franchisee_number'字段提供的代码:
/**
* @var string
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\Column(name="franchisee_number", type="string", length=255, nullable=false)
*
*/
private $franchiseeNumber;
我假设@ORM\GeneratedValue(strategy="NONE")
会告诉学说我将自己的值插入到字段中,而不是尝试生成它。
我的控制器代码
public function createAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_ADMIN');
$entity = new Accounts();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager('inertia');
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('accounts_show', array('id' => $entity->getId())));
}
return $this->render('InertiaBundle:Accounts:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
我还确保Bundle / Resources / config / doctrine目录中没有xml配置文件。
提前感谢您的帮助!
答案 0 :(得分:0)
我浪费了很多时间试图解决这个问题,并且无法找到一个好的答案。我刚刚决定以艰难的方式去做,并使用Doctrine DBAL编写了一个自定义查询,灵感来自这个问题/答案:https://stackoverflow.com/a/15650290/1647183
它对我来说就像一个魅力!
答案 1 :(得分:0)
如果您使用strategy="NONE"
,则必须在__construct
或其他系统中在持久/刷新实体之前创建标识符。
示例:
class MyEntity
{
/**
* @var string
*
* @ORM\Id
* @ORM\Column(type="string", name="id")
* @ORM\GeneratedValue(strategy="NONE")
*/
private $id;
public function __construct()
{
$this->id = 123; // Inject you custom ID here!
}
}