Symfony - 映射彼此不一致

问题描述 投票:5回答:2

我有2个实体,用户和追随者。

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
 */
class User extends BaseUser
{
    /**
     * @ORM\OneToMany(targetEntity="Follower", mappedBy="user")
     */
    protected $followers;

    /**
     * @ORM\OneToMany(targetEntity="Follower", mappedBy="follower")
     */
    protected $followings;
}


/**
 * @ORM\Entity
 * @ORM\Table(name="follows")
 */
class Follower
{        
    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
     */
    protected $user;

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
     */
    protected $follower;
}

用户有关注者($粉丝)和关注者($ followers)。

我不知道为什么,但我的开发者说:

映射AppBundle \ Entity \ User#followings和AppBundle \ Entity \ Follower#follower彼此不一致。

映射AppBundle \ Entity \ Follower#follower和AppBundle \ Entity \ User#followers彼此不一致。

为什么它们不一致而且应该完成?

php symfony doctrine-orm doctrine
2个回答
10
投票

在Follower Entity中,替换为:

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
 */
protected $follower;

有:

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="followings")
 */
protected $follower;

您可以使用命令doctrine:schema:validate检查当前映射是否有效的正向和反向映射。

php app / console doctrine:schema:validate

希望这有帮助


1
投票

您应该通过以下方式替换粉丝:

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="followers")
 */
protected $follower;

但我认为最好在User Entity上使用ManyToMany关联。你可以尝试这样的事情:

/**
 * @ORM\Entity
 * @ORM\Table(name="users")
*/
class User extends BaseUser
{
  /**
   * @ORM\ManyToMany(targetEntity="User", mappedBy="followings")
  */
  private $followers;

  /**
   * @ORM\ManyToMany(targetEntity="User", inversedBy="followers")
   * @ORM\JoinTable(name="follows",
   *      joinColumns={@ORM\JoinColumn(name="following_id", referencedColumnName="id")},
   *      inverseJoinColumns={@ORM\JoinColumn(name="follower_id", referencedColumnName="id")}
   *      )
  */
  private $followings;
© www.soinside.com 2019 - 2024. All rights reserved.