2014-11-07 104 views
0

我有很多醫院和供應商之間的一對多的關係,但是當我嘗試到醫院添加到我的VendorType的形式呈現,沒有醫院作爲<選項>的我的Symfony2表格多對多是空

這是我的代碼相關的片段。

VendorBundle /實體/ Vendor.php

/** 
* @ORM\Entity(repositoryClass="Incompass\VendorBundle\Entity\Repository\VendorRepository") 
* @ORM\HasLifecycleCallbacks 
*/ 
class Vendor 
{ 
    ... 

    /** 
    * @ORM\ManyToMany(targetEntity="Incompass\HospitalBundle\Entity\Hospital", inversedBy="authorized_vendors") 
    * @ORM\JoinTable(name="AuthorizedVendor", 
    *  joinColumns={@ORM\JoinColumn(name="vendor_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="hospital_id", referencedColumnName="id")} 
    *) 
    */ 
    protected $authorized_hospitals; 

HospitalBundle /實體/ Hospital.php

/** 
* @ORM\Entity(repositoryClass="Incompass\HospitalBundle\Entity\Repository\HospitalRepository") 
* @ORM\HasLifecycleCallbacks 
*/ 
class Hospital 
{ 
    ... 

    /** 
    * @ORM\ManyToMany(targetEntity="Incompass\VendorBundle\Entity\Vendor", mappedBy="authorized_hospitals") 
    * @ORM\JoinTable(name="AuthorizedVendor", 
    *  joinColumns={@ORM\JoinColumn(name="hospital_id", referencedColumnName="id")}, 
    *  inverseJoinColumns={@ORM\JoinColumn(name="vendor_id", referencedColumnName="id")} 
    *) 
    */ 
    protected $authorized_vendors; 

VendorBundle /表格/ VendorType.php

class VendorType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('authorized_hospitals', 'entity', 
        array(
         'class' => 'IncompassHospitalBundle:Hospital', 
         'multiple' => true, 
         'property' => 'name' 
        ) 
       ) 
       ->add('name', 'text') 
       ->add('address', 'text') 
       ->add('phone', 'text'); 
    } 

/AdminBundle /資源/views/Vendors/new.html.twig

<section class="col-md-12"> 
    {{ form_widget(form) }} 
</section> 

這就是得到渲染,我有一些醫院在數據庫中,所以我不知道爲什麼他們沒有出現在選擇。

<div class="form-group"> 
    <label class="control-label required" for="authorized_hospitals">Authorized hospitals</label> 
    <select id="authorized_hospitals" name="authorized_hospitals[]" required="required" class="form-control" multiple="multiple"></select> 
</div> 

回答

0

我現在已經工作了這一點,我不得不一個query_builder選項添加到我的FormType

$builder->add('authorized_hospitals', 'entity', 
      array(
       'class' => 'IncompassHospitalBundle:Hospital', 
       'multiple' => true, 
       'property' => 'name', 
       'query_builder' => function(\Doctrine\ORM\EntityRepository $er) { 
        $qb = $er->createQueryBuilder('h'); 
        return $qb->orderBy('h.name', 'DESC'); 
       } 
      ) 
     ) 
     ->add('name', 'text') 
     ->add('address', 'text') 
     ->add('phone', 'text'); 

}