在我当前的模型中,我有2个实体:Student
和StudentOrdersHistory
。我们正在使用历史表来记录学生的所有订单。
但是,我们特别需要使用最新的订单历史记录。首先,我使用了一些圆形参考,如以下内容:
StudentOrderHistory.student_id --> Student
Student.latest_order --> StudentOrderHistory
这样做的原因是我们期望有数百行的关系(这里的学生只是一个示例,可以简单地问我需要什么),但是由于我们大多需要与最后一个一起工作,所以我们认为将所有这些加载然后进行一些$student->orders->last()
是毫无意义的,因为它必须加载所有记录。
不必说,此实现在删除Student
时会带来痛苦,因为循环引用不会让我这样做,而不必先删除Student.latest_order
参考。
无论如何,我可以加载到Student
属性(例如Student::$latestOrder
)中,仅使用DQL?
当然,但是您可能无法直接通过学生对象进行操作。牺牲这种便利性应该可以提高您想要的绩效,实际上最好的做法表明,尽可能多地限制关系。
我尚未测试此代码,但是您可能知道如何使其正常工作。我将在订单式订购中添加一种方法,例如
public function getLatestForStudent(Student $student)
{
$this->findOneBy(['student' => $student], ['created']);
}