Расширение сущности - это путь.В мире Doctrine2 они говорят о наследовании.Вот пример кода.Он определяет BaseEntity
, затем расширяется для создания BaseAuditableEntity
и, наконец, существует User
сущность, расширяющая BaseAuditableEntity
.Хитрость заключается в использовании аннотации @Orm\MappedSuperclass
.Эта схема наследования создаст одну таблицу, даже если в моем графе отношений есть три объекта.Затем все свойства будут объединены в одну таблицу.Созданная таблица будет содержать каждое свойство, сопоставленное через отношения, то есть свойства от BaseAuditableEntity и от User.Вот примеры кода:
Acme\WebsiteBundle\Entity\BaseEntity.php
namespace Acme\WebsiteBundle\Entity;
use Doctrine\ORM\Mapping as Orm;
/**
* @Orm\MappedSuperclass
*/
class BaseEntity {
}
Acme\WebsiteBundle\Entity\BaseAuditableEntity.php
namespace Acme\WebsiteBundle\Entity;
use Doctrine\ORM\Mapping as Orm;
/**
* @Orm\MappedSuperclass
*/
class BaseAuditableEntity extends BaseEntity {
private $createdBy;
/**
* @Orm\Column(type="datetime", name="created_at")
*/
private $createdAt;
/**
* @Orm\ManyToOne(targetEntity="User")
* @Orm\JoinColumn(name="updated_by", referencedColumnName="id")
*/
private $updatedBy;
/**
* @Orm\Column(type="datetime", name="updated_at")
*/
private $updatedAt;
// Setters and getters here
}
Acme\WebsiteBundle\Entity\User.php
namespace Acme\WebsiteBundle\Entity;
use Acme\WebsiteBundle\Entity\BaseAuditableEntity;
use Doctrine\ORM\Mapping as Orm;
/**
* @Orm\Entity(repositoryClass="Acme\WebsiteBundle\Entity\Repository\UserRepository")
* @Orm\Table(name="acme_user")
*/
class User extends BaseAuditableEntity implements AdvancedUserInterface, \Serializable
{
/**
* @Orm\Id
* @Orm\Column(type="integer")
* @Orm\GeneratedValue
*/
private $id;
/**
* @Orm\Column(type="string", name="first_name")
*/
private $firstName;
/**
* @Orm\Column(type="string", name="last_name")
*/
private $lastName;
/**
* @Orm\Column(type="string", unique="true")
*/
private $email;
// Other properties
// Constructor
// Setters and getters
}
Вот ссылкак официальной документации по отображению наследования Doctrine 2.1: здесь
Надеюсь, это поможет, не стесняйтесь комментировать, если вам нужна дополнительная информация.
С уважением,Matt