2012-03-22 48 views
2

我有一個自我引用表在覆蓋的教義文檔(它已經在整個應用程序中大量使用,因此改變爲嵌套樹不是當前選項)。symfony2毗鄰列表模型使用與表格

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/association-mapping.html#one-to-many-self-referencing

表結構是這樣的:

+----+----------+--------+ 
| id | parentID | Name | 
+----+----------+--------+ 
| 1 |  null | Name 1 | 
| 2 |  1 | Name 2 | 
| 3 |  1 | Name 3 | 
| 4 |  2 | Name 4 | 
| 5 |  1 | Name 5 | 
-------------------------- 

到現在爲止我們的表格中,我們一直在使用整個實體內容我們的形式,即

 $builder->add('hierarchyid', 'entity', array(
      'class' => 'AcmeTestBundle:Hierarchies')     

哪工作正常,但現在我想能夠修改這個設置點在表中,即類似的:

 ->add('hierarchyid', 'entity', array(
      'class' => 'AcmeTestBundle:HierarchiesTest', 
      'query_builder' => function(HierarchiesTestRepository $repo) 
    {return $repo->findBy??????} 

但我打了一個心理塊如何完成這一點,任何想法?

我考慮過的一個選項是我已經有了構建這些實體的數組集合的代碼,這些實體在其他地方使用,但我不熟悉如何在窗體類型中實現一個教條arraycollection。

private function createNodeArray($node) 
{ 
    $this->hierarchyArrayCollection->add($node); 
    foreach ($node->getChildren() as $hierarchy) 
    { 
     $this->createNodeArray($hierarchy); 
    }   
} 

回答

0

任何有興趣我到底是去解決生成一個數組並使用選擇字段類型而不是實體,例如:

->add('hierarchyid', 'choice', array(
       'choices' => $hierarchy) 
3

query_builder選項應該返回QueryBuilder對象,我以爲你findAllById()方法返回的實際數據。您需要更改;)

除此之外,你也許應該補充property選項,以表明哪些領域將被顯示在列表...

+0

這就是我的問題。我可以使我的finaAllById方法遞歸執行,構建對象,然後不能傳回給query_builder。我無法弄清楚如何推回到形式。如果我只是返回一個QueryBuilder,按照常規方式(例如find('2')),我現在不會返回子項。 至於財產,我的實體正在使用toString來處理這個。 – MadManMonty 2012-03-23 10:22:44