У меня есть эта схема:
Entity Doctrine-generated Entity
+++++++++ ++++++++++++++++ +++++++
+Student+ ----- +Student/Events+ ------ +Event+
+++++++++ ++++++++++++++++ +++++++
Это говорит о том, что у ученика может быть много событий, и он представлен отношением ManyToMany. Студент — это сторона отношений.
каждый Event
добавляется с приращением id
и связаны с Student
, Конечно, таблица сопоставления генерируется доктриной автоматически из-за ManyToMany
,
я использую event sourcing
для этого, так что каждый Student
имеет status
этот статус — последнее событие студента.
Теперь я хотел бы получить все Students
которые имеют данный статус, скажем, например, «IN_REVIEW». Помните, что статус представлен последним событием Студента.
¿Как я могу сделать это с доктриной за одну поездку в базу данных? Более конкретно, я хотел бы сделать это с помощью построителя запросов.
PD: у меня есть следующий код:
$qb->select('a')
->from("DnDRaHApiBundle:Student", "a")
->leftJoin("a.status", "s");
Но не могу понять, как сделать запрос к таблице сопоставления. Я уже думал о получении всех Events
из Student
в обратном порядке идентификаторов, затем используйте это для запроса ученика, но мне не нравится такой подход, должен быть лучший способ.
С тем, что я понимаю, я могу предложить вам это:
$qb->select('Distinct a')
->from("DnDRaHApiBundle:Application", "a")
->leftJoin("a.status", "s")
->where('s.name = :name')//change name and put your real attribute
->orderBy('s.id','Desc')//the most recent have a the higher id
->setParameter('name','APPROVED');
Других решений пока нет …