语境
就我而言,我有一些带有“折扣券”(折扣)的订单。折扣可以在不同的条件下使用。例如,折扣有一个过期日期,可以由有限数量的客户使用,可以专用于用户,......
每个折扣可以附加到多个订单。
在我的后台,我想在订单创建表单中添加一个“折扣”字段,其中包含可用折扣列表,但只有正确的折扣。
我做了什么
具有字段 manyToMany 的实体“订单”
/** * @ORM\ManyToMany(targetEntity="PATH\MyBundle\Entity\Discount", inversedBy="orders") * @ORM\JoinTable(name="shop_discounts_orders", * joinColumns={@ORM\JoinColumn(name="order_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="discount_id", referencedColumnName="id")} * ) */ private $discounts;
具有字段 manyToMany 的实体“折扣”
/** * @ORM\ManyToMany(targetEntity="PATH\MyBundle\Entity\Order", mappedBy="discounts") */ private $orders;
带有字段 discounts 的表单 OrderType
$builder->add('discounts', 'entity', array( 'label' => 'Discount vouchers', 'required' => false, 'expanded' => true, 'class' => 'PATH\MyBundle\Entity\Discount', 'property' => 'title', 'multiple' => true, 'query_builder' => function(EntityRepository $er) use ($params) { return $er->getQuerySelectType($params); }, ));
使用此解决方案,我可以在我的实体存储库中返回由我的请求定义的特定折扣。例如,它适用于过期日期条件。
我想要什么
我想过滤复选框列表中的结果。实际上,我想将折扣的使用限制为专用用户,限制为产品列表,或者限制使用次数……而这些条件不能通过简单的 sql 请求来完成。
我尝试创建特殊类型。我的想法是有一个实体数组 Discount 并加载一个选择列表......之后,我创建了一个 dataTransformer 但它不起作用!
谢谢你的想法!