2014-11-07 52 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'); 

}