2016-07-22 27 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