【问题标题】:doctrine decimal not persisting in query教义小数不保留在查询中
【发布时间】:2017-06-25 16:37:11
【问题描述】:

在我的 Symfony 项目中,我一直在用原则坚持小数时遇到问题。

我有一个“Proyectos”实体,变量中有一个价格,所有变量都毫无问题地发送到查询,但价格(这是一个小数)在查询中显示为空,因为在我的 SQL 表中价格不能为null,就会出现错误。

问题出现在查询生成之间,因为在表单中,“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]

【问题讨论】:

    标签: php mysql symfony doctrine


    【解决方案1】:

    试试这个:

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

    在表单生成器中

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

    【讨论】:

    • 没用,还是一样的问题,还是谢谢帮忙
    • 您能否打印一个表单发送的数据示例?
    猜你喜欢
    • 1970-01-01
    • 2013-10-19
    • 2016-06-20
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多