web-dev-qa-db-ja.com

遅延読み込みを回避するDoctrine Symfony2

プロジェクトには、ユーザーとアバターの2つのエンティティがあります。

ユーザーはOneToOneリレーションを持つアバターを所有しています。

アバターは、ファイルオブジェクトとfileNameを持つエンティティです。 Symfony2ドキュメント で説明されているように、@ ORM\HasLifecycleCallbacksを使用して、ファイルを保存または削除します。

コントローラーで、現在のユーザーからアバターエンティティを削除したいのですが($user = $this->get('security.context')->getToken()->getUser()を使用)、$user->getAvatar()でアバターにアクセスできません。

var_dump($user->getAvatar());

object(AppBundle\Entity\Avatar)
    private 'id' => int 20
    public 'file' => null
    private 'fileName' => null

しかし、アバターのfileNameにアクセスしようとすると、次のように返されます。

$filename = $user->getAvatar()->getFileName();
var_dump($user->getAvatar());

object(AppBundle\Entity\Avatar)
    private 'id' => int 20
    public 'file' => null
    private 'fileName' => string 'myfile.png'

アバターをユーザーに関連付けるにはどうすればよいですか?

14
Leogout

Doctrine docs で説明されているように、フェッチ動作を熱心に指定する必要があります。

/**
 * @OneToOne(targetEntity="User", fetch="EAGER")
 * @JoinColumn(name="user_id", referencedColumnName="id")
 */

YAMLまたはその他の構成例のドキュメントを参照してください。

24
Anonymous