当请求子实体时,Doctrine 的实体管理器似乎在多表继承下返回父类的实体。这使得孩子的方法和属性无法访问。
我有两个班级人(父母)->所有者(孩子)
我的代码如下所示:
$person = $entityManager->find('Library\Entity\People\Owner', 2);
这将返回 parent( person ) 对象而不是请求的Owner对象。我将在下面展示这些实体是如何定义的。
问题:如何让实体管理器返回共享 id 为 2 的请求所有者对象,以便我可以访问getOwnedProperty()方法?
这两个实体的定义如下 - 不确定这对回答问题是否有用:
第一个实体: 人(父类)
namespace Library\Entity\People;
use Doctrine\ORM\Mapping as ORM;
use Library\Entity\General\Property;
use Doctrine\Common\Collections\ArrayCollection,
Library\Entity\Contract\Tenantcontract,
Library\Entity\People\Owner;
/**
* @ORM\Entity (repositoryClass="Library\Repository\People\PersonRepository")
* @ORM\Table(name="Person")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr",type="string")
* @ORM\DiscriminatorMap({"person" = "Person", "owner" = "Owner"})
*/
class Person
{
/**
* @ORM\Id
* @ORM\Column(type="integer");
*/
protected $user_id = NULL;
}
第二个实体: 所有者(Person 的孩子)
/**
* @ORM\Entity
*/
class Owner extends Person
{
/**
* @ORM\OneToMany(targetEntity="Library\Entity\General\Property", mappedBy="owner_id")
*/
protected $ownedProperties = null;
public function __construct()
{
$this -> ownerProperties = new ArrayCollection();
}
public function addOwnedProperty($propertyId)
{
$this -> ownedProperties[] = $propertyId;
}
public function getOwnedProperty()
{
return $this -> ownedProperties;
}
}