我已经完成了使用教义querybuilder的查询,这使我所有在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}
天。
注意:交互是一个由一个AboutsToMany关系关联的实体。
$this->interactions = new ArrayCollection()
首先,我想知道querybuilder是否可行,并了解代码的外观。如果没有,那么sql将如何,因为我也不知道如何使用sql。
非常感谢