使用关系(计算字段)来使用带有Symfony的学说来查询实体

时间:2018-10-06 05:01:54

标签: symfony doctrine-orm

我有一个名为Project的实体,并且一个Project有许多阶段,例如代码波纹管。

/**
 * Project
 *
 * @ORM\Table(name="mk_pl_project")
 * @ORM\Entity(repositoryClass="DB\ProjectBundle\Repository\ProjectRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Project extends Foundation
{
    // ..........
    /**
     * @var \DB\ProjectBundle\Entity\ProjectPhase[]
     * @ORM\OneToMany(targetEntity="DB\ProjectBundle\Entity\ProjectPhase", mappedBy="project", fetch="EAGER")
     */
    private $phases;

    // ..........
}

和Phase实体看起来像

/**
 * ProjectPhase
 *
 * @ORM\Table(name="mk_pl_project_phase")
 * @ORM\Entity(repositoryClass="DB\ProjectBundle\Repository\ProjectPhaseRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class ProjectPhase extends Foundation
{
    //.....
    /**
     * @var \DB\ProjectBundle\Entity\Project
     *
     * @ORM\ManyToOne(targetEntity="DB\ProjectBundle\Entity\Project", inversedBy="phases",cascade={"persist"},fetch="EAGER")
     * @ORM\JoinColumn(nullable=false)
     * @Assert\Valid()
     */
    private $project;
    //........
}

一个阶段具有开始和结束日期,我想从存储库中获取项目持续时间的天,月或年(该阶段最远的结束日期与同一项目中另一个阶段的最近开始日期之间的差)并进行比较它可以过滤结果。 项目的存储库看起来像下面的代码

/*** Filter method */

    /**
     * @param $lifeTime
     * @param $numberPerPage
     * @param $page
     * @return \Doctrine\ORM\Tools\Pagination\Paginator
     */
    public function filter($lifeTime, $numberPerPage, $page)
    {
        $qb = $this->createQueryBuilder('p');
        $qb->select('p')
            ->innerJoin('p.phases', 'phases')
            ->addSelect('phases');
        $qb->where('p.deleted = 0');
            //How to get distant end phase date and nearest start date to make difference ?
            // .....

        $qb->setFirstResult(($page - 1) * $numberPerPage)
            ->setMaxResults($numberPerPage);

        return new Paginator($qb);
    }

谢谢大家。

0 个答案:

没有答案