엔티티를 확장하는 것이 좋습니다. Doctrine2 세계에서는 상속 매핑에 대해 이야기합니다. 여기에 코드 예제가 있습니다. 그것은 BaseAuditableEntity
을 생성하기 위해 확장되고 User
엔티티가 확장되어 BaseAuditableEntity
으로 확장되는 BaseEntity
을 정의합니다. 요령은 @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
}
교리 2.1의 공식 상속 매핑 문서에 대한 링크 : here
희망이 있으면 도움이 되시길 바랍니다. 더 많은 정보가 필요하면 언제든지 주저하지 말고 의견을 남기십시오.
감사합니다,
매트 훌륭
. 나는 그것이 가능 했음에 틀림 없다는 것을 알았다. Matt 감사합니다. –
'BaseAuditableEntity.php'에 nullable = false를 가진'lastName' 컬럼이 있고 클래스를'User.php'로 확장한다고 가정 해 봅시다. 위의 coulumn lastname을 null 값 (nullable = true)을 허용하도록 변경해야합니다. 도와 주시겠습니까? 그렇게하는 법? –
'User.php' 클래스에서'lastName' 속성과 그것에 연결된 주석을 다시 작성해보십시오.어쩌면 이것은 기본 엔티티에서 이전에 설정되었던 것을 대체 할 것입니다. 그것이 작동하지 않으면, 나는 더 이상 도울 수 없다는 두려움. doctrine2 메일 링리스트에서 질문 해보십시오. 해결책을 찾으면 주저하지 말고 여기에보고하십시오. – Matt