【问题标题】:Association mapping with Doctrine与 Doctrine 的关联映射
【发布时间】:2016-01-26 02:39:44
【问题描述】:

我有两个实体:

用户和 评论

每条评论只能有一个用户,但一个用户可以有多个 cmets。

我不确定是要使用双向直连、单向连接表还是自引用。

我只希望在调用评论对象时应用这种关系。如果我在某处调用用户对象,我不希望一堆评论对象淹没用户对象。我应该采取哪种方法?

【问题讨论】:

  • 在评论对象中使用多对一的单向关系
  • 这没有实际意义,除非您专门调用 User->getComments() 或使用您加入的存储库方法并专门请求 cmets 被水合,否则您不会得到一堆评论对象。默认情况下,Symfony/Doctrine 总是会延迟加载关联,但需要注意的是,一对一关系总是会急切加载(至少在 2.3 中)。

标签: symfony doctrine-orm entity-relationship


【解决方案1】:

Symfony 的文档很好地解释了这个过程:http://symfony.com/doc/current/book/doctrine.html#fetching-related-objects

重要的是您可以轻松访问 产品的相关类别,但类别数据实际上不是 检索到您要求类别(即“延迟加载”)。

只需建立多对一关系,仅在需要时获取用户的 cmets。

User实体:

<?php
class User
{
    // ...

    /**
     * @ORM\OneToMany(targetEntity="Comment", mappedBy="author")
     */
    protected $comments;

    public function __construct()
    {
        $this->comments = new ArrayCollection();
    }
}

Comment实体:

<?php
class Comment
{
    // ...

    /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="comments")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $author;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    相关资源
    最近更新 更多