Symfony - The mappings are inconsistent with each other

12,369

Solution 1

In the Follower Entity, replace this:

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

with:

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

You can use the command doctrine:schema:validate that checks the current mapping for valid forward and reverse mappings.

php app/console doctrine:schema:validate

Hope this help

Solution 2

You should replace followers by followings in :

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

But i think it's better to use ManyToMany associations on User Entity. You can try something like this :

/**
 * @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;
Share:
12,369
Tigran
Author by

Tigran

Updated on June 19, 2022

Comments

  • Tigran
    Tigran almost 2 years

    I have 2 Entities, User and Follower.

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

    User have followers ($followers) and followings ($followings).

    I'm not sure why, but my dev profiler says:

    The mappings AppBundle\Entity\User#followings and AppBundle\Entity\Follower#follower are inconsistent with each other.

    The mappings AppBundle\Entity\Follower#follower and AppBundle\Entity\User#followers are inconsistent with each other.

    Why they are incosistent and it should be done?

  • Dan Chaltiel
    Dan Chaltiel over 7 years
    For me it was php bin/console doctrine:schema:validate
  • Matteo
    Matteo over 7 years
    hi @DanChaltiel. Thanks for the contribution. You are referring on the folder structure of the version 3 of the framework. This is an old answer about the v2.