名为"email"的字段覆盖无效

Tho*_*s K 4 annotations symfony doctrine-orm

我试图覆盖FOSUserBundle的用户映射的两个属性.

use FOS\UserBundle\Model\User as BaseUser;
...
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="user")
 * @UniqueEntity(
 *     fields={"emailCanonical", "zone"},
 *     errorPath="email",
 *     message="This email address is already in use."
 * )
 * @ORM\AttributeOverrides({
 *     @ORM\AttributeOverride(name="email", column=@ORM\Column(type="string", name="email", length=255, unique=false, nullable=false)),
 *     @ORM\AttributeOverride(name="emailCanonical", column=@ORM\Column(type="string", name="emailCanonical", length=255, unique=false, nullable=false))
 * })
 */
class User extends BaseUser
{
    ...
Run Code Online (Sandbox Code Playgroud)

一切似乎工作正常,除非我生成访问器: Invalid field override named 'email'

这里抛出错误:

// Doctrine\ORM\Mapping\ClassMetadataInfo

public function setAttributeOverride($fieldName, array $overrideMapping)
{
    if ( ! isset($this->fieldMappings[$fieldName])) {
        throw MappingException::invalidOverrideFieldName($this->name, $fieldName);
    }
Run Code Online (Sandbox Code Playgroud)

这里,$this->fieldMappings只包含我的子User的字段而不包含父(映射的超类)的字段.

有人知道吗?

小智 6

我设法使用Invalid字段覆盖类[class]的名为[field]的方法来修复此问题的方法是在类I中添加覆盖的属性覆盖它.

我正在使用版本Symfony v2.7.8Doctrine v1.6.1.

例:

<?php

use FOS\UserBundle\Model\User as BaseUser;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 *
 * @ORM\HasLifecycleCallbacks
 * @ORM\AttributeOverrides({
 *     @ORM\AttributeOverride(name="usernameCanonical",
 *         column=@ORM\Column(
 *             type="string",
 *             name="username_canonical",
 *             length=255,
 *             unique=false
 *         )
 *     )
 * })
 */
class User extends BaseUser
{
    /**
     * @var string
     *
     * @ORM\Column(type="string", name="username_canonical", length=255, unique=false)
     */
    protected $usernameCanonical;
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,出现另一个错误"列电子邮件的重复映射" (4认同)

Rob*_*Rob 0

编辑:

你是对的,FOSUserBundle/Resources/config/doctrine/model/User.orm.xml 中有映射信息...

<mapped-superclass name="FOS\UserBundle\Model\User">
    ...
    <field name="usernameCanonical" column="username_canonical" type="string" length="255" unique="true" />
    <field name="email" column="email" type="string" length="255" />
Run Code Online (Sandbox Code Playgroud)

只是猜测:也许这个 xml orm 配置没有正确解析?或者也许您也需要在 xml 中进行覆盖?