2

当请求子实体时,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; 
}   
 }
4

2 回答 2

0

似乎教义返回父类的问题与教义如何处理对非所有者(即父类的一部分,但不是子类的一部分)的人的调用有关

如果您请求子类(所有者),如果存在具有指定 id 的父实体,则学说将返回父类的实例。

我最初的期望是学说不会返回一个实体。

虽然这本身不是问题,但了解原则如何处理这些调用以确保将足够的保护措施插入到您的代码中是很有用的。

于 2013-09-20T23:39:18.797 回答
0

尝试为子类添加存储库:

class Owner extends Person 
{
    @ORM\Entity (repositoryClass="Library\Repository\People\**Owner**Repository")
}
于 2013-09-18T20:55:02.593 回答