Doctrine2.3 and OneToOne cascade persist doesn't seem to work

后端 未结 2 629
余生分开走
余生分开走 2021-01-13 07:09

I have two entites (User and UserPreferences) that I want to map OneToOne unidirectional.

The code looks something like this:

/**
 * @ORM\\Table(\"us         


        
相关标签:
2条回答
  • 2021-01-13 07:29

    Bug was with

     * @ORM\Column(name="user_preferences_id", type="integer")
    

    Your code should contain

     * @ORM\JoinColumn(name="user_preferences_id", referencedColumnName="id")
    

    instead of this.

    0 讨论(0)
  • 2021-01-13 07:43

    Ok found the solution:

    /**
     * User
     *
     * @ORM\Table("users")
     * @ORM\Entity
     */
    class User extends UserEntity
    {
        ...
    
        /**
         * @ORM\OneToOne
         * (
         *      targetEntity="UserPreferences",
         *      cascade={"persist", "remove"},
         *      inversedBy="user"
         * )
         */
        protected $userPreferences;
    }
    
    /**
     * @ORM\Table("user_preferences")
     * @ORM\Entity
     */
    class UserPreferences extends UserPreferencesEntity
    {
        /**
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue
         */
        protected $id;
    
        /**
         * @var int
         *
         * @ORM\OneToOne(targetEntity="User", mappedBy="id", cascade={"persist", "remove"})
         */
        protected $user;
    
        ...
    }
    

    First of all I had to specify mappedBy and inversedBy (which I already tried before but in the wrong direction - mappedBy at the owning side, inversedBy at inversed side). Also I thought that the inversed side did not need to have a separate id and I tried to use the id of the owning side (User#id) as primary key for this one too.

    • http://docs.doctrine-project.org/en/latest/reference/unitofwork-associations.html
    • http://docs.doctrine-project.org/en/latest/reference/association-mapping.html
    0 讨论(0)
提交回复
热议问题