在何处以及如何为表单元素设置SQL请求?

时间:2016-07-22 12:21:05

标签: sql symfony query-builder

我在食谱中或在stackoverflow上阅读了很多东西,但我找不到适合的东西,并清楚地解释了如何解决我的问题。

我有一个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'
        ));
    }
}

1 个答案:

答案 0 :(得分:4)

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

您应该将原始SQL查询转换为DQL,因此它与数据库无关。

关于将查询构建器与原生SQL一起使用的更新http://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',

));