Doctrine2不会在一对一的双向上延迟加载

时间:2012-04-12 11:58:09

标签: symfony doctrine-orm twig

我正在面对一些令人讨厌的教条问题。

我有一个文件实体和一个会议权利。

/**
 *
 * @author klauss
 *
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Document
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    public $id;

    /**
     * @ORM\Column(type="string", length=255, nullable=true)
     */
    public $path;

    /**
     * @ORM\OneToOne(targetEntity = "Conference", mappedBy = "image")
     */
    protected $conference;

    /**
     * @Assert\File(
     *      maxSize="4M",
     *      maxSizeMessage="Allowed maximum size is {{ limit }}"
     * )
     */
    public $file;

    // .....

会议实体

// .........

    /**
     * Uploaded image.
     *
     * @ORM\OneToOne(targetEntity = "Document", inversedBy = "conference")
     * @ORM\JoinColumn(name = "image", nullable = true, referencedColumnName = "id")
     */
    protected $image;

// ............

因此,在Twig模板中,我想执行以下操作:

{{ conference.image.path }}

但它只是不加载图像,我总是需要调用

$conference->getImage()->getPath();
在PHP中

在Twig中获取正确的路径。但不应该是一样的吗?如果我不在PHP中调用它,则Twig调用只返回一个空字符串

如何实现该Doctrine自动了解Document关系?

1 个答案:

答案 0 :(得分:2)

将您的实体类变量设为私有或受保护。 Doctrine 2依赖于它来实现它的延迟加载魔法。

http://docs.doctrine-project.org/en/latest/reference/architecture.html