2017-02-15 6 views
0

В моей текущей модели у меня есть 2 объекта: Student и StudentOrdersHistory. Мы используем таблицу истории для записи всех заказов от учащегося.Doctrine 2 - Ссылка на конкретный связанный элемент сбора

Однако нам особенно необходимо работать с последней историей заказов. Во-первых, я использовал некоторые циклическую ссылку, как в следующем:

StudentOrderHistory.student_id --> Student 

Student.latest_order --> StudentOrderHistory 

Причина этого заключается в том, что мы ожидаем, что отношение к сотни строк (студент здесь это просто пример, чтобы сделать это просто спросить, что мне нужно), но поскольку мы в основном должны работать с последним, мы решили, что это бесполезно загружать все из них, а затем делать $student->orders->last(), так как придется загружать все записи.

Излишне говорить, что эта реализация приносила боль при удалении Student, так как циркулярная ссылка не позволит мне сделать это, не дав сначала удалить ссылку Student.latest_order.

Есть ли в любом случае я могу загрузить в Student недвижимость (например, Student::$latestOrder) только для латтестов, использующих DQL?

ответ

0

Конечно, возможно, вы не сможете сделать это прямо через объект Student. Пожертвовать этим удобством нужно, чтобы вы улучшили производительность, и на самом деле doctrine best practices предлагают ограничить отношения как можно больше.

Я не тестировал этот код, но вы, вероятно, знаете, как заставить его работать. Я бы добавил метод в OrderRepository, например

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

 Смежные вопросы

  • Нет связанных вопросов^_^