doctrine decimal不会在查询中持久存在

时间:2017-06-25 16:37:12

标签: php mysql symfony doctrine

我在Symfony项目中一直存在使用doctrine持有小数的问题。

我有一个' Proyectos'变量中有价格的实体,所有变量都被发送到查询而没有问题,但价格(小数是十进制)在查询中显示为空,因为在我的sql表中价格不能为空,就会出现错误。

问题介于查询生成之间,因为在表单中," precio"以十进制形式发送。

我已经尝试将实体中的变量更改为数字类型,而不是成功。

实体:

 /**
 * @var decimal
 *
 * @ORM\Column(name="precio", type="decimal", precision=10, scale=2)
 */
 private $precio;

在表格中" precio"是十进制(10,2)

控制器:

$formBuilder = $this->get('form.factory')->createBuilder(FormType::class, $project);

$formBuilder
    ->add('titulo',         TextType::class)
    ->add('thumbdesc',      TextType::class)
    ->add('descripcion',    TextareaType::class)
    ->add('img',            TextType::class)
    ->add('thumbimg',       TextType::class)
    ->add('precio',         NumberType::class, array('scale' => 2))
    ->add('crear',          SubmitType::class);

$form = $formBuilder->getForm();

if ($request->isMethod('POST')) {
    $form->handleRequest($request);
    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($project);
        $em->flush();

        $request->getSession()->getFlashBag()->add('notice', 'Annonce bien enregistrée.');

        return $this->redirectToRoute('sofimar_inversiones_view', array('id' => $project->getId()));
    }
}

错误:SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'precio' cannot be null

教义和symfony变量类型之间肯定存在一些混淆,但我无法找到错误。

完整错误:

An exception occurred while executing
'INSERT INTO proyectos (titulo, descripcion, thumbdesc, thumbimg, img, precio, fecha)
VALUES (?, ?, ?, ?, ?, ?, ?)'
with params ["title", "description", "desc", "image", "img", null, "2017-06-25 16:39:48"]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'precio' cannot be null

发布参数:

[titulo => title,
thumbdesc => desc,
descripcion => description,
img => img, thumbimg => image,
precio => 12.36, crear => ,
_token => qNaO1AD3BpqSOuTW2vdQz5pX4A4Pk2S3QNv6ZEhZmzo]

1 个答案:

答案 0 :(得分:0)

试试这个:

/**
 * @var integer
 *
 * @ORM\Column(name="precio", type="decimal", precision=10, scale=2)
 */
 private $precio;

在表单构建器

->add('precio', NumberType::class, array('scale' => 2, 'required' => true))