2

Doctrine のエンティティ マネージャは、子エンティティが要求されると、複数テーブルの継承の下で親クラスのエンティティを返すように見えます。これにより、子のメソッドとプロパティにアクセスできなくなります。

私は2つのクラス(親) - >所有者(子供)を持っています

私のコードは次のようになります。

 $person = $entityManager->find('Library\Entity\People\Owner', 2);

これは、要求されたOwnerオブジェクトではなく、親 ( person ) オブジェクトを返します。これらのエンティティがどのように定義されているかを以下に示します。

質問: getOwnedProperty()メソッドにアクセスできるように、共有 ID が 2 の要求された所有者オブジェクトをエンティティ マネージャーに返すようにするにはどうすればよいですか?

2 つのエンティティは次のように定義されています。これが質問への回答に役立つかどうかはわかりません。

FIRST ENTITY: person (親クラス)

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;
}

2 番目のエンティティ: 所有者( 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

子クラスのリポジトリを追加してみてください:

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

親クラスを返すドクトリンの問題は、ドクトリンが所有者ではない人の呼び出しを処理する方法に関連しているようです (つまり、親クラスの一部であり、子クラスではありません)。

子クラス (所有者) をリクエストすると、指定された ID を持つ親エンティティが存在する場合、教義は親クラスのインスタンスを返します。

私の最初の期待は、doctrine が代わりにエンティティを返さないということでした。

これ自体は問題ではありませんが、doctrine がこれらの呼び出しをどのように処理して、コードに適切なセーフガードが確実に挿入されるかを知っておくと便利です。

于 2013-09-20T23:39:18.797 に答える