代码之家  ›  专栏  ›  技术社区  ›  BernardA

Symfony 4@UniqueEntity不适用于GEDMO树复合字段

  •  0
  • BernardA  · 技术社区  · 6 年前

    我似乎已经正确地完成了设置,但这仍然不起作用,即,它不会正确地设置数据库表。实际上,它完全忽略了@uniquentity注释。

    我正在建立一个 GEDMO tree ,其中不应为同一父id重复类别的标题。

    所以,看看 @UniqueEntity documentation 而且在我之前构建的一些代码中,这应该是有效的:

    /应用程序/实体/类别

    namespace App\Entity;
    
    use Doctrine\Common\Collections\Collection;
    use Doctrine\ORM\Mapping as ORM;
    use Doctrine\Common\Collections\ArrayCollection;
    use Gedmo\Mapping\Annotation as Gedmo;
    use Symfony\Component\Validator\Constraints as Assert;
    use Symfony\Component\Validator\Context\ExecutionContextInterface;
    use Symfony\Component\Validator\Mapping\ClassMetadata;
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
    /**
     * @Gedmo\Tree(type="nested")
     * @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")
     * @UniqueEntity(
     *  fields={"parent", "title"}, // or fields={"parent_id", "title"}
     *  errorPath="title", 
     *  message="This title is already in use for this parent.") 
     * @ORM\Table(name="categories")
    */
    
    class Category
    {
    
    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue
     */
    private $id;
    
    /**
     * @ORM\Column(type="string", length=190)
     */
    private $title;
    .....
    /**
     * @Gedmo\TreeParent
     * @ORM\ManyToOne(targetEntity="Category", inversedBy="children")
     * @ORM\JoinColumn(referencedColumnName="id", onDelete="CASCADE")
     */
    private $parent;
    
    ....
    }
    

    实际上有一个 similar question in here ,没有解决方案。

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jason Roman    6 年前

    如果你想检查数据库级别,你需要使用条令 UniqueConstraint 注释:

    /*
     * @ORM\Table(name="categories", uniqueConstraints={
     *     @ORM\UniqueConstraint(name="uq_cat_parent_title", columns={"parent_id", "title"})
     * })
     */
    

    编辑:修改我的答案以包含索引的名称。条令文件表明这是必需的。

    推荐文章