2015-11-19 31 views
-2

我是symfony上的newby。 我正在使用symfony 2.7.6開發一個項目。 我有一個對象/實體「Trajet」,其中包含2個屬性(這是我的頭痛源!)。 這兩個屬性是VilleDepart和VilleArrivee(整數鏈接到我的數據庫的教條(對象類中的ORM註釋)) 在我的表單中,我希望它們顯示爲下拉列表。所以我用了兩個實體字段類型的formbuilder。當我試圖堅持控制器中的「Trajet」對象(使用實體管理器),我得到這個sql錯誤(因爲它認爲兩個屬性VilleDepart和VilleArrivee作爲實體而不是整數)... 我清楚地看到問題是...的SQL查詢如何堅持包含作爲選擇列表的表單中顯示的屬性的實體

INSERT INTO trajet (traj_villedepart , traj_villearrivee) VALUES ({}, {}) 

而不是

INSERT INTO trajet (traj_villedepart , traj_villearrivee) VALUES (1, 2) 

例如

這裏他班裏TRAJET

class Trajet { 

    /** 
    * @ORM\Id @ORM\Column(name="idtrajet", type="integer") 
    * @ORM\GeneratedValue 
    */ 
    private $ID; 
/** 
    * @ORM\Column(name="traj_idvilledepart", type="integer") 
    */ 
    private $VilleDepart; 

    /** 
    * @ORM\Column(name="traj_idvillearrivee", type="integer") 
    */ 
    private $VilleArrivee; 

//Getters and setters.... 
} 

這裏是我的形式

class TrajetType extends AbstractType 
{ 
    private $manager; 

    public function __construct(ObjectManager $manager) 
    { 
     $this->manager = $manager; 
    } 
public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('DescriptionVoiture', 'textarea') 
      ->add('VilleDepart', 'entity', array(
       'class' => 'MyBundle:Ville', 
       'property' => 'Nom', 
       'em'  => 'pgsql', 
       'query_builder' => function(VilleRepository $er){ 
        return $er->getVillesOrderByOrdre(); 
       }, 
      )) 
      ->add('VilleArrivee', 'entity', array(
       'class' => 'MyBundle:Ville', 
       'property' => 'Nom', 
       'em'  => 'pgsql', 
       'query_builder' => function(VilleRepository $er){ 
        return $er->getVillesOrderByOrdre(); 
       }, 
      )) 
} 
public function getName() 
    { 
     return 'trajet'; 
    } 
} 

最後我控制器

class TrajetController extends Controller { 

    public function AddEditTrajetAction($idTrajet = null) { 
     $manager = $this->getDoctrine()->getManager('pgsql'); 
     $trajet = new Trajet(); 
     //Initialize the object $trajet with the get ID.... 
     $form = $this->createForm(new TrajetType($manager), $trajet); 
     $request = $this->getRequest(); 
     if ($request->isMethod('POST')) { 
      $form->handleRequest($request); 
      if ($form->isValid()) { 

       $manager->persist($trajet); 
       $manager->flush(); 
       //Return to the view... 
      } 


      } 
    } 
} 

請幫抽象類型TRAJET的!我變得瘋狂!感謝

+0

代碼的一部分是可觀的。 – scoolnico

+0

你能從你的實體類中定義「Trajet」的代碼嗎?根據你的班級長相如何,可能有幾種方法可以解決你的問題。我猜你的房產VilleDepart和VilleArrivee都是實體,對嗎? – Fuzzzzel

+0

它聽起來像你可能需要一個數據轉換器來轉換整數和實體。 http://symfony.com/doc/current/cookbook/form/data_transformers.html但像以前的評論員一樣,我不清楚到底發生了什麼。 – Cerad

回答

0

我終於找到了解決辦法:TRAJET與威樂之間的單向oneToone關係,我修改了類TRAJET像

class Trajet {   

    /** 
    *@ORM\OneToOne(targetEntity="xxx\Entity\Ville") 
    *@ORM\JoinColumn(name="traj_idvilledepart", ReferencedColumnName="idville", nullable=false) 
    */ 
    private $VilleDepart; 

    //The same for VilleArrivee... 

//Getters and setters.... 
} 

然後在controlleur

$manager->persist($trajet); 
$manager->flush(); 

將工作輕鬆

相關問題