Forms Gedmo条令扩展树无法创建没有父级的类别
我使用Gedmo条令扩展将类别作为嵌套集处理。 我正在构建一个RESTAPI,我有一个创建类别的路径。 我希望能够创建根类别或子类别。 这是实体Forms Gedmo条令扩展树无法创建没有父级的类别,forms,symfony,nested-sets,doctrine-extensions,Forms,Symfony,Nested Sets,Doctrine Extensions,我使用Gedmo条令扩展将类别作为嵌套集处理。 我正在构建一个RESTAPI,我有一个创建类别的路径。 我希望能够创建根类别或子类别。 这是实体 <?php namespace AppBundle\Entity; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; /** * @Gedmo\Tree(type="nested") * @ORM\Table(name="bo_categorie
<?php
namespace AppBundle\Entity;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\ORM\Mapping as ORM;
/**
* @Gedmo\Tree(type="nested")
* @ORM\Table(name="bo_categories")
* use repository for handy tree functions
* @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
*/
class Category
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
private $id;
/**
* @ORM\Column(name="name", type="string", length=64)
*/
private $name;
/**
* @Gedmo\TreeLeft
* @ORM\Column(name="lft", type="integer")
*/
private $lft;
/**
* @Gedmo\TreeLevel
* @ORM\Column(name="lvl", type="integer")
*/
private $lvl;
/**
* @Gedmo\TreeRight
* @ORM\Column(name="rgt", type="integer")
*/
private $rgt;
/**
* @Gedmo\TreeRoot
* @ORM\Column(name="root", type="integer", nullable=true)
*/
private $root;
/**
* @Gedmo\TreeParent
* @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="Category", mappedBy="parent")
* @ORM\OrderBy({"lft" = "ASC"})
*/
private $children;
public function getId()
{
return $this->id;
}
public function setName($name)
{
$this->name = $name;
}
public function getName()
{
return $this->name;
}
public function setParent(Category $parent = null)
{
$this->parent = $parent;
}
public function getParent()
{
return $this->parent;
}
}
如果我想创建一个子类别,它可以正常工作。但是如果我想创建一个根类别而不删除表单中的父字段,我会得到这个错误
从bo_类别b0_.id中选择b0_.id作为id0,b0_.name作为name1,b0_.lft作为lft2,b0_.lvl作为lvl3,b0_.rgt作为rgt4,b0_.root作为root5,b0_.parent作为parent_id作为parent_id6时发生异常,其中b0_.id IN'带有参数[]:\n\nSQLSTATE[22P02]:无效文本表示:7错误:整数的输入语法无效:,
类别:条令\DBAL\DBALException
为什么会出现这个错误?表单中的父值不能为空/null吗?父值为null绝对没有问题。另一方面,您当前的映射不允许这样做 首先,您应该修改$parent的映射 应允许空值: 不要忘记在更改映射时运行app/console原则:schema:update-force 接下来,您的表单看起来不错,但它缺少一个属性-empty_值。这不会强制您选择父类别
->add('parent', 'entity', array(
'class' => 'AppBundle:Category',
'property' => 'id',
))
应该是这样的:
->add('parent', 'entity', array(
'class' => 'AppBundle:Category',
'property' => 'id',
'empty_value' => '-- Select parent --'
))
这将添加没有值的额外选项,并且在创建新类别时默认应选中该选项。由于您的字段是entity类型,因此当您需要选择parent时,您也将看到所有类别
这应该可以做到,试试看。我在映射中添加了nullable=true,但这并没有改变任何东西。我仍然会犯同样的错误。schema:update告诉我,由于多对一是一个集合,所以默认情况下可以为null,因此在模式中没有任何看起来合乎逻辑的更改。“empty_value”=>“-Select parent-”只适用于HTML表单,我正在构建一个API,所以我的调用是通过POSTMAN进行的。无论如何谢谢你的帮助:我错过了API部分。侧注M:1表示表中的外键,而不是集合。如果您确定ParentAcceptNull,您应该能够创建根类别。我稍后会调查,因为我正在打电话。
@ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE")
@ORM\JoinColumn(name="parent_id", referencedColumnName="id", onDelete="CASCADE", nullable=true)
->add('parent', 'entity', array(
'class' => 'AppBundle:Category',
'property' => 'id',
))
->add('parent', 'entity', array(
'class' => 'AppBundle:Category',
'property' => 'id',
'empty_value' => '-- Select parent --'
))