在我目前的模型中,我有2个实体:Student
和StudentOrdersHistory
。我们使用历史记录表记录学生的所有订单。
但是,我们特别需要使用最新的订单历史记录。起初,我使用了一些循环引用,如下所示:
StudentOrderHistory.student_id --> Student
Student.latest_order --> StudentOrderHistory
这样做的原因是我们希望关系有数百行(这里的学生只是一个例子,可以让我很简单地问我需要什么),但是因为我们大多需要使用最后一行,所以我们认为加载所有这些,然后做一些$student->orders->last()
是毫无意义的,因为它必须加载所有记录。
毋庸置疑,此实现在删除Student
时带来了痛苦,因为循环引用不会让我在不先删除Student.latest_order
引用的情况下执行此操作。
无论如何,我只能使用DQL加载到Student
属性(如Student::$latestOrder
)只有最后一个?
答案 0 :(得分:0)
当然,但您可能无法通过Student对象直接执行此操作。牺牲这种便利应该可以提高你想要的性能,事实上doctrine best practices建议尽可能地约束关系。
我没有测试过这段代码,但您可能知道如何让它运行起来。我将一个方法添加到OrderRepository,比如
public function getLatestForStudent(Student $student)
{
$this->findOneBy(['student' => $student], ['created']);
}