原则2 与条件的关联映射

2022-08-30 20:40:59

是否有可能与教义2.4中的条件进行关联映射?我有实体文章和评论。评论需要由管理员批准。注释的审批状态存储在布尔字段“已批准”。

现在,我有@OneToMany关联映射到实体文章中的注释。它映射了所有注释。但我只想映射已批准的评论。

类似的东西

@ORM\OneToMany(targetEntity="Comment", where="approved=true", mappedBy="article")

会很有帮助。不幸的是,AFAIK在映射中没有哪里条件这样的东西,所以我试图解决我的继承问题 - 我创建了类注释的两个子类。现在我有批准的评论和未批准的评论,SINGLE_TABLE继承映射。

 @ORM\InheritanceType("SINGLE_TABLE")
 @ORM\DiscriminatorColumn(name="approved", type="integer")
 @ORM\DiscriminatorMap({1 = "ApprovedComment", 0 = "NotApprovedComment"})

问题是,由于“已批准”列是鉴别器,因此我不能再将其用作实体注释中的字段。


答案 1

可以使用条件 API 筛选集合

<?php

use Doctrine\Common\Collections\Criteria;

class Article
{

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

    public function getComments($showPending = false)
    {
        $criteria = Criteria::create();
        if ($showPending !== true) {
            $criteria->where(Criteria::expr()->eq('approved', true));
        }
        return $this->comments->matching($criteria);
    }

}

这特别好,因为 Doctrine 足够聪明,只有在尚未加载集合时才转到数据库。


答案 2

推荐