关联X指的是未定义为关联的反面域Y

The association X refers to the inverse side field Y which is not defined as association

我有两个实体:

Team:

class Teams
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer", name="id")
     * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="team")
     *
     */
    private $id;

User:

class User implements UserInterface, \Serializable
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Teams", inversedBy="id")
     * @ORM\JoinColumn(name="team_id", referencedColumnName="id")
     */
    private $team;

一个团队有许多个用户

我遇到了这些错误:

The association App\Entity\User#team refers to the inverse side field App\Entity\Teams#id which is not defined as association.

The association App\Entity\User#team refers to the inverse side field App\Entity\Teams#id which does not exist.

我不知道我哪里错了...有人知道吗?

此致

您希望您的团队看起来像这样:

class Team
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer", name="id")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\User")
     */
    private $users;

这将生成用户团队。如果您希望您的用户能够加入多个团队,也将您的用户调用更改为 ManyToMany。

class User implements UserInterface, \Serializable
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToMany(targetEntity="App\Entity\Team")
     */
    private $teams;

我有点搞不懂你想做什么。

如果你想从用户端建立单向关系,那么删除

 * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="team")

这段代码。

而用户应该只有

/**
 * @ORM\ManyToOne(targetEntity="App\Entity\Teams")
 */
private $teams;

另一方面,如果您想要双向关系,请在团队实体上添加 属性 用户。

它对你不起作用,因为你定义的映射在 $id 上,它应该在 属性

双向方式:

class Teams
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer", name="id")
     *
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="teams")
     * @ORM\JoinColumn(name="team_id", referencedColumnName="id")
     */
    private $user;

class User implements UserInterface, \Serializable
{
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Teams", mappedBy="user")
     */
    private $teams;

使用单数名称命名实体是一种很好的做法,因此您可能希望将 Teams 更改为 Team 实体。

也检查http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-one-unidirectional