Mysql
 sql >> Base de données >  >> RDS >> Mysql

Doctrine2.3 et la persistance en cascade OneToOne ne semblent pas fonctionner

Ok trouvé la 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;

    ...
}

Tout d'abord, j'ai dû spécifier mappedBy et inversedBy (que j'ai déjà essayé auparavant mais dans le mauvais sens - mappedBy du côté propriétaire, inversedBy du côté inversé). De plus, j'ai pensé que le côté inversé n'avait pas besoin d'avoir un identifiant séparé et j'ai essayé d'utiliser l'identifiant du côté propriétaire (User#id) comme clé primaire pour celui-ci également.