0
$news = \DB::getEntityManager()->createQueryBuilder()
->select('n')
->from('Model\News', 'n')
->join('n.category', 'c')
->join('n.locales', 'l')
->where('l.language = :lang AND n.id = :id AND n.published = 1')
->setParameter('id', $news_id)
->setParameter('lang', $lang)
->getQuery()
->getResult();
$news->category->getName();
該代碼生成兩個查詢而不是一個後產生兩個查詢。 爲什麼?學說2 - 加入實體仍然是一個代理和請求
在得到我的$news
實體後,category
屬性仍然是一個Doctrine代理類(Application\Proxies\__CG__\Model\News\Category
)。 \Model\News\Category
的實例只有在獲得某些類別數據(例如,$news->category->getName()
)後纔會加載,並且它將生成附加的 SQL查詢。
如何使Doctrine下載\Model\News
及其相關的\Model\News\Category
只有一個查詢?
下面是category
場與註釋的配置從\Model\News
:
/**
* @ManyToOne(targetEntity="\Model\News\Category", inversedBy="news", fetch="EAGER")
*/
public $category;
,你可以看到... EAGER
是不工作...
只有當Doctrine緩存設置爲「ArrayCache」以外時它才能工作嗎? –