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
| 归档时间: |
|
| 查看次数: |
784 次 |
| 最近记录: |