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

时间:2016-05-11 18:48:08

标签: symfony doctrine symfony-2.8

我正在使用遗留数据库在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配置文件。

提前感谢您的帮助!

2 个答案:

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