Использование модели списка смежности symfony2 с формами - PullRequest
2 голосов
/ 22 марта 2012

У меня есть собственная таблица ссылок, как описано в документации доктрины (которая уже интенсивно используется во всем приложении и, следовательно, переход на вложенное дерево не является текущей опцией).

http://docs.doctrine -project.org / projects / doctrine-orm / ru / 2.0.x / reference / association-mapping.html # один-ко-многим-самоссылающимся

Структура таблицы выглядит следующим образом:

+----+----------+--------+
| 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??????}

Но я попал в ментальный блок, как это сделать, есть идеи?

Один из вариантов, который я рассмотрел, состоит в том, что у меня уже есть код, который создает коллекцию массивов этих сущностей, которая используется в другом месте, но я не знаю, как мне следует реализовать коллекцию массивов доктрин в типе формы.

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

Ответы [ 2 ]

3 голосов
/ 22 марта 2012
Опция

query_builder должна возвращать объект QueryBuilder, и я предполагаю, что ваш метод findAllById() возвращает фактические данные.Вы должны изменить это;)

Кроме этого, вам, вероятно, следует добавить опцию property, чтобы указать, какое поле должно отображаться в списке ...

0 голосов
/ 16 апреля 2012

Для тех, кто заинтересован, в конце концов я решил создать массив и использовать тип поля выбора, а не сущность, например:

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