여러 고객이 사용할 Symfony 애플리케이션을 작성 중입니다. 일부 고객에게는 추가 기능이 필요하기 때문에 BUNDLEA에 모든 표준 기능을 넣고 BundleB에 추가 기능을 추가해야합니다. BundleB는 필요로하는 고객에게만 사용 가능합니다.Symfony : 다른 번들의 교리 객체 덮어 쓰기
내가 BundleB에서하고 싶은 일 중 하나는 BundleA에서 엔티티를 확장하여 추가 필드를 추가하는 것입니다. 나는 위의 코드에 대한 SQL 덤프하려고하면
<?php
// BundleA/Model/Element.php
namespace BundleA\Model;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperclass
*/
abstract class Element
{
// All shared fields defined here
}
<?php
// BundleA/Entity/Element.php
namespace BundleA\Entity;
use BundleA\Model\Element as AbstractElement;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="Element")
* @ORM\Entity
*/
class Element extends AbstractElement
{
}
<?php
// BundleB/Entity/BundleBElement.php
namespace BundleB\Entity\Entity;
use BundleA\Model\Element as AbstractElement;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="Element")
*/
class BundleBElement extends AbstractElement
{
/**
* @ORM\Column(name="mypage_id", type="integer")
*/
protected $mypageId;
}
, 나는 다음과 같은 얻을 :
표 이름의 '요소'이미
는내 코드는 현재 다음과 같이 보입니다 존재합니다.
기본적으로 필자는 생각하기에 엔티티에 사용할 Element 클래스를 구성 할 수있는 일종의 구성 옵션이라고 생각합니다. 다음과 같이 설정하십시오 :
bundle:
element_class: BundleB\Entity\BundleBElement
그러나이 설정 옵션을 구현하는 방법은 확실하지 않습니다.
모든 고객에게는 자체 데이터베이스가 있으므로 충돌하는 엔티티의 문제가 있어서는 안됩니다.
먼저 한 가지 문제를 해결하십시오. 두 개의 엔티티가 동일한 @ORM \ Table (name = "Element")' – Flosculus
을 가지고 있습니다. 둘 중 하나만 활성화해야하므로 같은 테이블 이름을 사용하고 싶습니다. BundleA 또는 BundleB의 Element를 사용하도록 구성되어야하며 둘 다에서 구성되지 않아야합니다. 그래서 어떤 클래스가 엔티티로 사용되어야하는지 정의하는 "bundle.element_class"와 같은 config 옵션이 필요합니다. – nifty
간단하지 않습니다. Doctrine2 설정을 사용하면 매핑 할 디렉토리를 지정할 수 있습니다. 번들은 기본적으로 자동 매핑이 켜져 있으면 자동으로 매핑됩니다. 즉, 하나의 디렉토리를 무시하고 다른 디렉토리를 사용하도록 지시 할 수 있습니다. – Flosculus