Я пытаюсь использовать @MappedSuperclass. Это хорошо работает для простых переменных (int, string ...) и отношений OneToMany / ManyToOne. Но отношения OneToOne не работают.
У меня есть два MappedSuperclass с отношением OneToOne:
_SiteUser
/**
* @MappedSuperclass _SiteUser
*
* @ORM\Entity(repositoryClass="_SiteModule\_Repository\_SiteUserRepository")
* @ORM\Table(name="site_users")
*/
class _SiteUser
{
/**
* @var int
* @Groups("id")
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @Groups({"username"})
*
* @ORM\Column(name="username", type="string", length=255, unique=true)
*/
protected $username;
/**
* @var string
* @Groups({"password"})
*
* @ORM\Column(name="password", type="string", length=255)
*/
protected $password;
/**
* @var _SiteUserTo
*
* @ORM\OneToOne(targetEntity="_SiteModule\_Entity\_SiteUserTo", mappedBy="user")
* @Gedmo\Versioned()
*/
protected $user_to;
_SiteUserTo
/**
* @MappedSuperclass _SiteUserTo
*
* @ORM\Entity(repositoryClass="_SiteModule\_Repository\_SiteUserToRepository")
* @ORM\Table(name="users_to")
*/
class _SiteUserTo
{
/**
* @var int
* @Groups("id")
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var _SiteUser
*
* @ORM\OneToOne(targetEntity="_SiteModule\_Entity\_SiteUser", inversedBy="user_to")
* @JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
И это мой 2 класс, который расширяет эти MappedSuperclass:
SiteUser
/**
* SiteUser
*
* @ORM\Entity(repositoryClass="SiteModule\Repository\SiteUserRepository")
* @ORM\Table(name="site_users")
*/
class SiteUser extends _SiteUser
{
}
SiteUserTo
/**
* SiteUserTo
*
* @ORM\Entity(repositoryClass="SiteModule\Repository\SiteUserToRepository")
* @ORM\Table(name="users_to")
*/
class SiteUserTo extends _SiteUserTo
{
}
Когда я генерирую сущности из своего MappedSuperclass (_SiteUser и _SiteUserTo), я получил таблицу с именем users_to с id и user_id. Но когда я генерирую сущности из моих других классов (SiteUser и SiteUserTo), он создает таблицу «users_to» только с полем id. Я не знаю почему ...
Если я обновлю свой класс SiteUser следующим образом:
/**
* Class SiteUser
*
* @ORM\Entity(repositoryClass="SiteModule\Repository\SiteUserRepository")
* @ORM\Table(name="site_users")
*/
class SiteUser extends _SiteUser
{
/**
* @var boolean
*
* @ORM\Column(name="test", type="boolean")
*/
protected $test;
/**
* @var SiteUserTo
*
* @ORM\OneToOne(targetEntity="SiteModule\Entity\SiteUserTo", mappedBy="user")
*/
protected $user_to;
}
И SiteUser, чтобы вот так:
/**
* Class SiteUserTo
*
* @ORM\Entity(repositoryClass="SiteModule\Repository\SiteUserToRepository")
* @ORM\Table(name="users_to")
*/
class SiteUserTo extends _SiteUserTo
{
/**
* @var boolean
*
* @ORM\Column(name="test", type="boolean")
*/
protected $test;
/**
* @var SiteUser
*
* @ORM\OneToOne(targetEntity="SiteModule\Entity\SiteUser", inversedBy="user_to")
* @JoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
}
У меня та же проблема, нет поля user_id
в таблице users_to
. Но поле «тест» хорошо создано в таблице site_users
и в таблице users_to
...