symfony OneToMany Form



我正在使用Symfony来构建以下功能:我有产品和运输。一种产品可能拥有更多的运输,一台运输只能与一个产品相匹配。

生产力:

/**
 * @ORMOneToMany(targetEntity="ShippingWay",mappedBy="product")
 */
private $shippingWays;

运输实体:

/**
 * @ORMManyToOne(targetEntity="Product", inversedBy="shippingWays")
 * @ORMJoinColumn(name="product_id", referencedColumnName="id")
 **/
private $product;

然后我同时构建了productType和shippingwaywaytype。

productType

->add('shippingWays', EntityType::class, array(
            'label'              => ' Shipping Ways',
            'translation_domain' => 'forms',
            'class'              => 'CoreBundle:ShippingWay',
            'choice_label'       => 'name',
            'multiple'           => true,
            'required'           => false,
        ))

productController

 /**
 * @Route("/admin/product/new", name="admin_product_new")
 * @Template()
 */
public function newAction(Request $request)
{
    $product = new Product();
    $shippingWay= new ShippingWay();
    $form = $this->createForm(ProductType::class, $product);
    $shippingForm = $this->createForm(ShippingWayType::class, $shippingWay);
    if ($request->isMethod('POST')) {
        $form->handleRequest($request);
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($product );
            $em->flush();
            return $this->redirect($this->generateUrl('admin_product'));
        }
    }
    return(array('form' => $form->createView(),'users'=>$users,'shippingForm '=>$shippingForm ->createView()));
}
  • 我想在产品页面中添加/编辑运输方式。
  • 如果没有合适的运输方式,那么我必须在产品页面中创建一个新的。这样的东西:

在此处输入图像描述

目前我有2个问题:

  • 如何在产品页面中像往常一样管理运输方式?是否有一种一般的方法来处理Onetomany&许多人的关系?
  • 我选择添加产品X时选择运输方式A,然后我可以像以前那样选择a的运输方式A。

有人可以给我一些建议和参考吗?非常感谢。

对于您的第一个问题:在您的 productType 中,您不应将EntityType用于运输,因为它只显示与运输实体相关的现有条目的列表。p>如果要添加/编辑,最好使用CollectionType,如下所示:如何将集合嵌入Symfony form

在您的情况下,您的 productType 是:

->add('shippingWays', CollectionType::class, array(
        'label'              => ' Shipping Ways',
        'translation_domain' => 'forms',
        'entry_type          => 'CoreBundle:ShippingWay',
        'choice_label'       => 'name',
        'allow_add'          => true,
        'allow_delete'       => true
    ))

相关内容

  • 没有找到相关文章

最新更新