php 两列的唯一实体-Symfony 2

qvsjd97n  于 2022-12-17  发布在  PHP
关注(0)|答案(4)|浏览(114)

我有餐厅和类别-每个类别有一个餐厅,每个餐厅可以有许多类别。我希望每个餐厅的类别有唯一的名称,我希望如果有人试图打破这一点,得到的消息是,形式是无效的,而不是被阻止的模式。所以这里是我的尝试:

use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Table(name="categories", uniqueConstraints={@ORM\UniqueConstraint(name="name_restaurant_id_idx", columns={"name", "restaurant_id"})}))
 * @ORM\Entity(repositoryClass="MyBundle\Entity\CategoryRepository")
 * @UniqueEntity({"name", "restaurant"})
 */
class Category
{
     /** @ORM\Column(name="category_id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $categoryId;

    /**
     * @ORM\Column(name="name", type="string", length=45, nullable=false, unique=true)
     */
    private $name;

    /**
     * @ORM\ManyToOne(targetEntity="MyBundle\Entity\Restaurant")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="restaurant_id", referencedColumnName="restaurant_id", unique=true)
     * })
     */
    private $restaurant;

但它不起作用:(我被模式阻止,
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry
我还尝试了* @UniqueEntity({"name", "restaurant_id"}),但是我得到一个错误,restaurant_id没有被DoctrineMap。
你知道为什么它不工作吗:(

piv4azn7

piv4azn71#

要在多个字段上创建唯一约束,必须将它们添加到**@UniqueEntity()中的fields**参数。
例如:

@UniqueEntity(fields={"name", "restaurant"}).

我也希望这个问题已经得到解决https://github.com/symfony/symfony/issues/6727

ycl3bljg

ycl3bljg2#

我认为您的问题是表中已有不符合新约束的数据。请尝试截断表并再次更新,或在更新架构之前手动编辑数据以反映新约束。

dpiehjr4

dpiehjr43#

在我自己的UniqueEntity中,我有一个customer字段和一个option字段,它们必须是唯一的组合。customer是由对控制器的请求设置的,而不是由表单本身设置的,所以Assert不起作用。我可以通过让表单呈现customer,然后在呈现的表单视图中隐藏该选项来解决这个问题。

u59ebvdq

u59ebvdq4#

为此,您必须有一个void表。

相关问题