symfony2 doctrine - 将子项添加到自相关实体

Kam*_*l P 6 php rest doctrine symfony doctrine-orm

我有一个与自身有关的实体.该实体具有字段:父级子级.

class A
{
    // ...

    /**
     * @var A
     * @ORM\ManyToOne(targetEntity="A", inversedBy="children")
     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
     */
    protected $parent;

    /**
     * @var A[]
     * @ORM\OneToMany(targetEntity="A", mappedBy="parent", cascade={"all"}, orphanRemoval=true)
     */
    protected $children;
}
Run Code Online (Sandbox Code Playgroud)

我想通过在表单中​​设置子项来将子项添加到此实体.此实体类型如下所示:

class AType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('children', 'collection', [
                'type' => new AType(),
                'allow_add' => true,
                'allow_delete' => true,
                'by_reference' => false,
                'prototype' => true,
            ])
        ;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我发送这样的数据时:

'a' => [
    [
        'name' => 'main a',
        'children' => [
            [
                'name' => 'child a 1',
            ],
            [
                'name' => 'child a 2',
            ],
        ],
    ],
],
Run Code Online (Sandbox Code Playgroud)

(在测试中,我没有视图,因为此应用程序基于完整的REST Api通信)我收到此错误:

PHP致命错误:达到了'100'的最大函数嵌套级别,正在中止!

那么,甚至可以将孩子添加到与自我相关的实体中吗?

如果我有2个实体,它将起作用:实体A,其中字段子项与实体B相关.但是,它可以与此关系一起使用吗?

我应该将AType类中的类型更改new AType()为不同的类型.

编辑:其实我只想获取数据并验证它.我不需要HTML表单来显示它.我可以这样做:

// controller
$jms = $this->get('jms_serializer');
$entity = $jms->deserialize($request->getContent(), 'AcmeBundle\Entity\A', 'json');

$this->em->persist($entity);
$this->em->flush();
Run Code Online (Sandbox Code Playgroud)

不使用控制器中的表格.但在这种情况下,我的数据将无法验证.

小智 0

我建议您看看这里: https://github.com/Atlantic18/DoctrineExtensions/blob/master/doc/tree.md#tree-entity-example

除了parentID 之外,结构id DB 还依赖于存储在DB 中的其他字段。

它的模型基于此: https: //en.wikipedia.org/wiki/Nested_set_model