2010-10-22 93 views
2

它看起来像当我忘记把leftJoin放在我的查询中时,Doctrine会在我选择它们之后延迟加载关系。也就是说,如果我这样做:主义:懒惰加载属性

$property = PropertyTable::getInstance()->createQuery('o') 
    ->leftJoin('o.Features f') 
    ->execute() ; 

我仍然能够访问财产而$>景点,即使我没有在此查询加载它们。所以我认为Doctrine在内部通过调用另一个'SELECT'来完成它。有没有办法通过抛出一些异常来防止这种自动加载?这将帮助我创建更好更快的查询。

回答

-1

你看过它生成的实际SQL吗?

尝试->getSql()。当您尝试访问相关字段时,它很可能正在执行另一个查询。

如果你想避免这种情况,请不要访问相关领域!

+0

是的,我已经尝试过,没有,它不加载Attraction的。但我可以通过$ property-> Attraction访问它们。我想抛出一些异常,所以在编写查询时我不会犯错。当我制作真正大的节目时,很容易跳过这样的事情。 – Zeljko 2010-10-22 17:54:45

+0

我相信你可以访问它们,因为它触发了一个新的查询,因此它是预期的行为。我认为这里的解决方案不是改变机器,而是要更多地关注你如何使用机器。 – Tom 2010-10-23 09:40:49

+0

是的,但主意是防止自动获取。跳过一些加入大型项目的快速开发是非常容易的。 – Zeljko 2010-10-24 11:51:02