如何在编辑表单(Symfony2)中将数据从数据库设置到我的实体字段?

时间:2016-09-09 15:41:33

标签: symfony

我在Symfony 2.7中开发应用程序,我从一个产品表(InProducto)生成了CRUD,它与OneToMany相关联到另一个表(InUnidadMedida)。 当我打开编辑表单时,ENTITY FIELD(UNIDAD DE MEDIDA表中的选择字段)中的值始终显示为相关表(UNIDAD DE MEDIDA)的第一个选项。并且它假设在表INPRODUCTO

的字段中获得值

InProductoType:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nombre')
            ->add('descripcion')
            ->add('unidadMedida', 'entity', array(
                'class' => 'NivalInventarioBundle:InUnidadMedida',
                'query_builder' => function (EntityRepository $er) {
                    return $er->createQueryBuilder('u')
                        ->orderBy('u.nombre', 'ASC');
                },
                'choice_label' => 'nombre',
                'by_reference' => false,
                'property' => 'type',
                'expanded' => false,
                'multiple' => false
            ))
}

控制器:

private function createEditForm(InProducto $entity)
    {
        $form = $this->createForm(new InProductoType(), $entity, array(
            'action' => $this->generateUrl('inproducto_update', array('id' => $entity->getIdProducto())),
            'method' => 'PUT',
        ));

        $form->add('submit', 'submit', array('label' => 'Guardar'));

        return $form;
    }

产品表(实体)

 /**
 * InProducto
 *
 * @ORM\Table(name="in_producto")
 * @ORM\Entity
 */
class InProducto
{
    /**
     * @ORM\ManyToOne(targetEntity="InSubLinea", inversedBy="InProducto")
     * @ORM\JoinColumn(name="id_sub_linea", referencedColumnName="id_sub_linea")
     */
    protected $subLinea;

    /**
     * @ORM\ManyToOne(targetEntity="InUnidadMedida", inversedBy="InProducto")
     * @ORM\JoinColumn(name="id_unidad_medida", referencedColumnName="id_unidad_medida")
     */
    protected $unidadMedida;

    /**
     * @var integer
     *
     * @ORM\Column(name="id_producto", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")

Unidad de medida TABLE(实体)

 /**
 * InUnidadMedida
 *
 * @ORM\Table(name="in_unidad_medida")
 * @ORM\Entity
 */
class InUnidadMedida
{
    /**
     * @ORM\OneToMany(targetEntity="InProducto", mappedBy="InUnidadMedida")
     */
    protected $InProducto;

    public function __construct()
    {
        $this->InProducto = new ArrayCollection();
    }

2 个答案:

答案 0 :(得分:0)

如果您已正确映射这些实体,Symfony会自动猜测表单类型。

所以,只需

       ->add('unidadMedida', null, array(
            'choice_label' => 'nombre',
            'expanded' => false,
            'multiple' => false
        ))

并没有property这样的选项。您的意思是property_path吗?

答案 1 :(得分:0)

经过几个小时的刮擦,这非常简单,我将以下属性添加到我的字段中:

        'by_reference' => true,
        'mapped' => true,

感谢Dmitry Malyshenko的时间。