教义:延迟加载属性
Posted
技术标签:
【中文标题】教义:延迟加载属性【英文标题】:Doctrine : Lazy loading properties 【发布时间】:2010-10-22 17:34:24 【问题描述】:看起来当我忘记将 leftJoin 放在查询中时,Doctrine 会在我选择它们后延迟加载关系。即,如果我这样做:
$property = PropertyTable::getInstance()->createQuery('o')
->leftJoin('o.Features f')
->execute() ;
我仍然可以访问 $property->Attraction ,即使我没有在此查询中加载它们。所以我猜 Doctrine 是通过调用另一个“SELECT”在内部完成的。有没有办法通过抛出一些异常来防止这种自动加载?这将帮助我创建更好更快的查询。
【问题讨论】:
【参考方案1】:你看过它产生的实际 sql 吗?
试试->getSql()
。当您尝试访问相关字段时,它可能正在执行另一个查询。
如果您想避免这种情况,请不要访问相关字段!
【讨论】:
是的,我试过了,不,它不会加载景点。但我可以通过 $property->Attraction 访问它们。我希望抛出一些异常,这样我在编写查询时就不会出错。当我制作非常大的程序时,很容易跳过类似的东西。 我相信你可以访问它们,因为它会触发一个新的查询,因此它是预期的行为。我认为这里的解决方案不是换机器,而是更注意你如何使用机器。 是的,但这个想法是为了防止自动获取。大程序的快速开发很容易跳过一些join。以上是关于教义:延迟加载属性的主要内容,如果未能解决你的问题,请参考以下文章