【问题标题】: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”在内部完成的。有没有办法通过抛出一些异常来防止这种自动加载?这将帮助我创建更好更快的查询。

【问题讨论】:

    标签: php orm doctrine


    【解决方案1】:

    你看过它产生的实际 sql 吗?

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

    如果您想避免这种情况,请不要访问相关字段!

    【讨论】:

    • 是的,我试过了,不,它不会加载景点。但我可以通过 $property->Attraction 访问它们。我希望抛出一些异常,这样我在编写查询时就不会出错。当我制作非常大的程序时,很容易跳过类似的东西。
    • 我相信你可以访问它们,因为它会触发一个新的查询,因此它是预期的行为。我认为这里的解决方案不是换机器,而是更注意你如何使用机器。
    • 是的,但这个想法是为了防止自动获取。大程序的快速开发很容易跳过一些join。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 2013-07-03
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多