Symfony 4 @UniqueEntity не работает с составными полями дерева GEDMO

Я, кажется, сделал настройку правильно, но все же это не работает, то есть он не будет правильно устанавливать таблицу базы данных. На самом деле он полностью игнорирует аннотацию @UniqueEntity.

Я настраиваю Дерево ГЕДМО, где заголовок категории не должен повторяться для того же parent_id.

Итак, глядя на Документация @UniqueEntity и также в некотором предыдущем коде, который я построил, это должно работать:

/ App / Entity / Категория

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;

....
}

Там на самом деле Подобный вопрос здесь, без решения.

0

Решение

Если вы хотите проверить на уровне базы данных, вам нужно использовать Doctrine’s Уникальное ограничение аннотация:

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

РЕДАКТИРОВАТЬ: изменил мой ответ, чтобы включить имя индекса. В документации доктрины говорится, что это необходимо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]