Doctrine querybuilder хитрый запрос - PullRequest
0 голосов
/ 24 октября 2019

Я выполнил запрос с помощью построителя запросов доктрины, который собирает всех студентов, которые перешли на X этап X дней назад.

Код выглядит так:

$date = Carbon::today()->subDay($days);
$qb = $this->createQueryBuilder('s');
$qb->innerJoin('s.currentPDPStudentStageEntry','c', 'WITH', $qb->expr()->andX(
    $qb->expr()->eq('c.pdpStudentStage.stage', ':stage'),
    $qb->expr()->gt('c.createdAt', ':date1'),
    $qb->expr()->lte('c.createdAt', ':date2')
))->setParameters([
    'stage' => $stage, 
    'date1' => $date->format('Y-m-d H:i:s'), 
    'date2' => $date->addDay(1)->format('Y-m-d H:i:s')]);
return $qb->getQuery()->getResult();

Теперь дело в том, что бизнес-логика изменилась.

Я должен проверить, является ли последнее взаимодействие учащегося с системой более поздним, чем смена этапа, в этом случае отсчет должен начаться там.

Вот пример:

$stage = 'enrolled'  
$days = 21;   

Приведите ко мне всех студентов, которые перешли на сцену {$stage} {$days} дней назад. НО, если учащийся взаимодействовал с системой позднее, чем смена даты этапа, рассчитайте {$days} дней от даты этого взаимодействия.

Примечание. Взаимодействие - это объект, связанный отношением ownToMany.
$this->interactions = new ArrayCollection()

Прежде всего я хотел бы узнать, возможно ли это с помощью построителя запросов, и иметьИдея, как будет выглядеть код. Если нет, то как будет sql, так как я тоже не знаю, как это sql.

Большое спасибо

...