Symfony2 实体不会使用自定义主键刷新

Symfony2 entity won't flush with custom primary key

我正在 Symfony2 中使用遗留数据库开发一个项目,该项目使用一个字符串作为 6 位数字 'franchisee_number',前面有浮点 0 - 例如。 000123。当我尝试刷新实体时,我收到一个错误,显示它试图执行的 SQL 语句,它甚至没有尝试插入以插入我的主键字段。直到刷新实体的时候,'franchisee_id' 出现在实体中,所以我假设 Doctrine 有问题不想设置主键,而是让它生成。

我的问题与这个问题非常相似:,但我已经尝试了列出的答案,但它们不起作用。

这是我实体中 '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 配置文件。

在此先感谢您的帮助!

我浪费了很多时间试图解决这个问题,但找不到很好的答案。我只是决定用困难的方式来做,并用 Doctrine DBAL 写了一个自定义查询,受到这个 question/answer 的启发:

它对我来说就像一个魅力!

如果您使用 strategy="NONE",您必须在 __construct 或其他系统中在 persist/flush 实体之前创建一个标识符。

示例:

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!
    }
}