原则2 - 引用特定的关联集合项

时间:2017-02-15 17:14:19

标签: doctrine-orm

在我目前的模型中,我有2个实体:StudentStudentOrdersHistory。我们使用历史记录表记录学生的所有订单。

但是,我们特别需要使用最新的订单历史记录。起初,我使用了一些循环引用,如下所示:

StudentOrderHistory.student_id  --> Student

Student.latest_order  --> StudentOrderHistory

这样做的原因是我们希望关系有数百行(这里的学生只是一个例子,可以让我很简单地问我需要什么),但是因为我们大多需要使用最后一行,所以我们认为加载所有这些,然后做一些$student->orders->last()是毫无意义的,因为它必须加载所有记录。

毋庸置疑,此实现在删除Student时带来了痛苦,因为循环引用不会让我在不先删除Student.latest_order引用的情况下执行此操作。

无论如何,我只能使用DQL加载到Student属性(如Student::$latestOrder)只有最后一个?

1 个答案:

答案 0 :(得分:0)

当然,但您可能无法通过Student对象直接执行此操作。牺牲这种便利应该可以提高你想要的性能,事实上doctrine best practices建议尽可能地约束关系。

我没有测试过这段代码,但您可能知道如何让它运行起来。我将一个方法添加到OrderRepository,比如

public function getLatestForStudent(Student $student)
{
    $this->findOneBy(['student' => $student], ['created']);
}