我在食谱中或在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'
));
}
}
答案 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',
));