2016-07-22 71 views
-1

我在食谱或计算器中阅读了很多东西,但找不到适合自己的东西,并且明确解释了如何解决我的问题。何处以及如何为表单元素设置SQL请求?

我有一个SQL请求,它允许我找到教授特定主题的学校。我需要设置这个SQL请求,以便当我加载包含我的表单的页面时,完成请求,并以多选形式查看结果(学校列表)。我最好的猜测是,我需要设置我的控制器内,但话又说回来,我甚至不能肯定这一点,因为这是第一次,我需要做的

我不知道我是否应该显示你有任何代码,所以问你是否需要看点什么!

预先感谢您

编辑这里是我的formType

<?php 

namespace MissionBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Bridge\Doctrine\Form\Type\EntityType; 
use SocieteBundle\Entity\Societe; 

class PublicType extends AbstractType{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 

     $builder 
      ->add('public') 
      ->add('ecolesDispo') 
      // My goal is to replace 'ecolesDispo' (that is currently a one-to-many) 
      // by my SQL request. 
     ; 

    } 

    /** 
    * @param OptionsResolver $resolver 
    */ 
    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'MissionBundle\Entity\Mission' 
     )); 
    } 
} 
+0

它会更好,如果您发布您的代码..最小的基本部分找出问题并帮助找到解决方案 –

+0

添加我的FormType – Jaeger

回答

4

当然不是在控制器中。将该字段添加到表单时,您需要使用“query_builder”属性。看看这个例子,从Symfony的食谱:http://symfony.com/doc/current/reference/forms/types/entity.html#using-a-custom-query-for-the-entities

而且你应该把原始的SQL查询翻译成DQL,所以它是数据库不可知的。

更新关于使用查询构建器与本地SQLhttp://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/native-sql.html#the-nativequery-class

因此,像这样下面这段代码应工作(你必须编辑一些属性名,虽然填补了查询)

$builder->add('ecolesDispo', EntityType::class, array(
'class' => 'AppBundle:Ecole', 
'query_builder' => function (EntityRepository $er) { 
    return $er->createNativeQuery('SELECT * FROM ecoles WHERE [...]'); 
}, 
'choice_label' => 'title', 

));

+0

谢谢你的回答,我要问一个新手问题,但有没有办法在里面设置一个带有纯SQL的query_builder?这就是我努力在网上找到的 – Jaeger

+0

我刚刚更新了我的答案。看看它,并告诉我它是否有效。 – VaN

+0

非常感谢您的明确回答!然而,使用/调整您的代码以满足我的需求,但是我现在有这个错误:'未定义的方法'createNativeQuery'。方法名称必须以findBy或findOneBy!开始' – Jaeger

相关问题