关联X指的是未被定义为关联的逆侧字段Y.

时间:2018-03-13 18:31:30

标签: php symfony associations field

我有两个实体:

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;

一个团队有多个用户

我遇到了这些错误:

  

关联App \ Entity \ User#team指的是反面字段   App \ Entity \ Teams#id未定义为关联。

     

关联App \ Entity \ User#team指的是反面字段   App \ Entity \ Teams#id不存在。

我不知道我错在哪里......任何人都知道吗?

此致

2 个答案:

答案 0 :(得分:2)

我对你想做什么感到困惑。

如果您想从用户端获得单向关系,请删除

 * @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;

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

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

答案 1 :(得分:0)

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

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;