我想優化查詢,因爲我需要一個簡單的列表作爲附屬於幾個實體的實體。 所以我創造了這個查詢,你應該給我回的ID和名稱:在控制器原則部分查詢返回完整的對象
public function findAllOrderByName() {
$qb = $this->createQueryBuilder('a');
$query = $qb->select(array('partial a.{id,name}'))
->addOrderBy('a.name', 'ASC')
->getQuery();
return $query->getResult();
}
換來的卻是這樣的:
public function getInstrumentsAction()
{
$instruments = $this->getDoctrine()->getRepository('AcmeInstrumentBundle:Instrument')->findAllOrderByName();
return array('instruments' => $instruments);
}
,而不是僅僅給我回了兩大陣營,給我完整的對象,因此包括其他相關實體的所有字段。
它爲什麼不起作用?
非常感謝您的解釋! 有一件事我不明白..在dev.log其實我看到使用這個查詢: 'SELECT i0_.id AS id0,i0_.name AS name1 FROM Instrument i0_ ORDER BY i0_.name ASC [] [ ]' 但是當我通過對象時,我就是所有關聯實體的信息。 不知何故會通過懶惰加載水合.. 但是,在我看來,雖然我不確定,使用getArrayResult()執行更快,然後邏輯應該已經排除了所有我不需要的數據! – Lughino
不是。在大多數情況下,延遲加載是一件好事。我想你可以爭辯說,使用部分應該禁用延遲加載,但它可能會變得複雜。你可以在教條留言板上打開討論。 – Cerad
感謝您的諮詢! – Lughino