Symfony - 映射彼此不一致

时间:2016-01-26 10:30:42

标签: php symfony doctrine-orm doctrine

我有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;
}

用户有粉丝($粉丝)及关注($以下)。

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

  

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

     

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

为什么他们不存在而应该这样做?

2 个答案:

答案 0 :(得分:10)

在追随者实体中,替换为:

/**
 * @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 :(得分:1)

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

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

但我认为在用户实体上使用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;