2011-10-26 56 views
1

我正在使用Symfony 2與教義。我目前有一個名爲Worker的實體,並且在Worker實體中與用戶實體存在多對一關係。Symfony 2表格+顯示關係數據

/** 
* @ORM\ManyToOne(targetEntity="User") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id") 
*/ 
private $user; 

還有像Worker這樣的實體,還有像Manager這樣的實體。我想創建一個創建Job實體的表單。在表單中,我試圖創建一個選擇選項來選擇一個工人,但工人的名字存儲在用戶數據庫中。有沒有辦法在表單選項中從用戶數據庫中打印工作人員的姓名。

$builder->add('workers','entity',array('label' => 'Workers:', 
           'property'=>'t.user.firstName', 
           'empty_value' => 'Choose a Worker', 
           'class' => 'Company\CompanyBundle\Entity\Worker', 
                'query_builder' => function (\Company\CompanyBundle\Repository\WorkerRepository $repository) 
                  { 
                    return $repository->createQueryBuilder('t') 
                       ->add('orderBy', 't.user.firstName ASC'); 
                  } 
       )) 

    ; 

任何想法?

回答

3

我認爲,這將是enoough做這樣的事情:「)__toString(」

$builder->add('workers', 'entity', array(
      'class' => 'Company\CompanyBundle\Entity\Worker', 
     )); 

此外,你應該實現的方法在你的工人實體,你將返回任何你想要顯示(在這種情況下,工人的名字),所以在工體實體的__toString方法是這樣的:

function __toString() { 
    return $this->getName(); 
} 

這是我通常實現這種關係的方式,我希望它能幫助!

+0

謝謝!它非常完美! – Daniel

0

如果你願意,你可以這樣做另一種選擇:

$builder->add('workers', 'entity', array(
    'class' => 'Company\CompanyBundle\Entity\Worker', 
    'property' => 'property_name' 
)); 

如果定義在實體類中選擇「屬性」,你並不需要實施「_toString()」