私はSymfony 2.7でアプリケーションを開発中ですが、OneToManyと関連するPRODUCT TABLE(InProducto)から別のテーブル(InUnidadMedida)にCRUDを生成しました。 編集フォームを開くと、ENIDTY FIELD(UNIDAD DE MEDIDAテーブルの選択フィールド)の値が常に関連テーブル(UNIDAD DE MEDIDA)の最初のオプションとして表示されます。編集フォーム(Symfony2)のデータベースから自分のエンティティフィールドに値を設定し、設定するにはどうすればよいですか?
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;
}
Productoテーブル(エンティティ)
/**
* 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デ、それはテーブルINPRODUCTO
InProductoTypeのフィールドの値を取得すると仮定しますメディダテーブル(エンティティ)
/**
* 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();
}
それは非常に奇妙です。デフォルトでこれらの値を設定する必要があります。それは、コード内でそれを再定義するものでなければなりません。 –