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