在manyToMany Relation界面中添加搜索表单

时间:2012-03-26 20:27:54

标签: symfony doctrine-orm

如何在实体之间的多对多关系中实现搜索表单。

我想先从实体中搜索项目,然后将它们添加到我的其他实体。我正在使用一长串商品(产品),我需要链接到商店,我不能使用简单的列表框来选择我的商品。

我需要你指点教程或解释这个界面问题的任何解释。

目标是使用最少的javascript

2 个答案:

答案 0 :(得分:0)

我建议您创建一个视图,您可以在其中选择类别或定义搜索条件。第二个视图,您只能按先前选择的条件显示产品。在第二个视图中,您可以使用entity Field Typehttp://symfony.com/doc/current/reference/forms/types/entity.html#query-builder)并为以下实体提供自定义查询:

use Doctrine\ORM\EntityRepository;
// ...
$builder->add('users', 'entity', array(
    'class' => 'AcmeHelloBundle:Product',
    'query_builder' => function(ProductRepository $er) {
       return $er->createQueryBuilder('p')
                 ->where('p.category = 1);
    },
));

此解决方案根本不需要JavaScript。

答案 1 :(得分:0)

我花了很多时间试图找出最佳解决方案,在可重用性,性能和人体工程学之间做出妥协,我找到了一个很好的解决方案

我是这样做的:

  • 我创建了一个自定义表单字段,它显示了一个类似于实体字段类型的集合,但是我传递了我想在一个漂亮的表中显示的字段名称:

    ->add('products','reflist',array(
                 'columns'=>array('name','cost','description'),
                 'actions'=>array('select'=>true,'remove'=>true),
                 'entityName'=>'VendorProductBundle:Product',
                 'searchForm'=> 'Vendor\ProductBundle\Form\ProductSearchType'
          ));

  • 然后我创建了一个通用搜索服务,它接受输入要搜索的实体。结果以弹出的方式发送。

  • 最后,我创建了一个与我的新字段相关的控制器来管理添加,删除等操作

这就是逻辑。

我无法真正分享这项工作,因为它真的依赖于我的框架(取决于搜索服务,布局等......)