【问题标题】:Symfony3 - @UniqueEntity is not workingSymfony3 - @UniqueEntity 不工作
【发布时间】:2018-07-04 17:54:45
【问题描述】:

当我打算保存我的数据库允许的@uniqueConstrainst 数据时,我找不到处理数据库错误的方法。 问题是我的@UniqueEntity 在数据库错误显示之前没有处理错误。

这是我的代码

    * @ORM\Table(name="persona_idioma", uniqueConstraints={@UniqueConstraint(name="persona_idioma_unique",columns={"id_persona","id_idioma"})},indexes={@ORM\Index(name="IX_Relationship11", columns={"id_idioma"}), @ORM\Index(name="IX_Relationship12", columns={"id_persona"})})
 * @ORM\Entity(repositoryClass="AppBundle\Repository\PersonaIdiomaRepository")
 * @UniqueEntity(
 *     fields={"idPersona", "idIdioma"},
 *     errorPath = "idPersona", 
 *     message="mensaje"
 *       
 * )

更新:我刚刚添加了实体的列

/**
     * @var \AppBundle\Entity\Persona
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Persona",inversedBy="idiomas")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_persona", referencedColumnName="id_persona")
     * })
     */
    private $idPersona;

    /**
     * @var \AppBundle\Entity\Idioma
     *
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Idioma")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="id_idioma", referencedColumnName="id_idioma")
     * })
     */
    private $idIdioma;

以及实体所在的控制器

$formulario->handleRequest($request);

    if ($formulario->isSubmitted() && $formulario->isValid()) {
        $em->persist($persona);
        $em->flush();
        return $this->redirectToRoute('persona_edit', array('id_persona' => $persona->getIdPersona()));
    }

    return $this->render('persona/new_edit.html.twig', [
                'formulario' => $formulario->createView(),
    ]);

【问题讨论】:

  • 能否分享验证实体的代码?
  • 我刚刚确实添加了列
  • 我的意思是:您是否在持久化实体之前使用验证器来验证实体?
  • 不,我该怎么做?
  • 简单问题 - 添加@UniqueEntity 注释后,您是否清除了缓存? ;)

标签: php symfony unique unique-constraint


【解决方案1】:

我遇到了和你一样的问题,我把代码改成了:

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 * @UniqueEntity(fields={"username", "email"}, message="This value is already taken")
 */

到:

/**
 * User
 *
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 * @UniqueEntity(fields={"username"}, message="This username is already taken")
 * @UniqueEntity(fields={"email"}, message="This email is already taken")
 */

这很奇怪,但它对我有用。如果我帮助了你,请给我签名。

【讨论】:

  • 我不知道这是否有效,但需要同时具有两个字段的唯一实体
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-17
  • 1970-01-01
相关资源
最近更新 更多