Работа с отношениями (вычисляемые поля) для запроса сущностей с использованием доктрины с Symfony - PullRequest
0 голосов
/ 06 октября 2018

У меня есть объект с именем 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);
    }

Спасибо всем.

...