FOSUserBundle:唯一实体注释抛出:Doctrine并未映射“用户”字段,因此无法对其进行唯一性验证

时间:2019-08-27 08:50:30

标签: symfony doctrine fosuserbundle

我有一个实体Employee,其中的外键来自User。 我正在使用FOSUserBundle。

我想在UserEmployee之间实现独特的一对一关系。

我尝试添加UniqueEntity批注,但出现以下错误:

  

“ Doctrine并未映射“用户”字段,因此无法验证其唯一性。”

我发现问题在于User实体使用...

use FOS\UserBundle\Model\User as BaseUser; 

...而不是...

use FOS\UserBundle\Entity\User as BaseUser;

但是我不知道我必须重写什么,因为捆绑中的这个实体不存在。

/**
 * Employee
 * @ORM\Table(name="employee")
 * @ORM\Entity
 * @UniqueEntity(
 * fields={"User"},
 * errorPath="User",
 * message="This account is assigned"
 * )
 */
class Employee {

    /**
     * @var User
     *
     * @ORM\ManyToOne(targetEntity="User")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="user_id", referencedColumnName="id",unique=true)
     * })
     */
    private $myUser;

}

namespace App\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }   
    function getId() {
        return $this->id;
    }

    function setId($id) {
        $this->id = $id;
    }

    public function getUsername() {
        return $this->username;
    }
}

1 个答案:

答案 0 :(得分:0)

Employee定义的@UniqueEntity类中,您引用的是类名,而不是属性名 1}}。

注释的正确配置应为fields,而不是fiels={"myUser"}

User