2010-10-22 3 views
2

Похоже, когда я забываю поставить leftJoin в своих запросах, Doctrine будет лениво-загружать отношения после того, как я их заберу. Т.е., если я что-то вроде:Doctrine: Lazy loading properties

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

я все еще будет в состоянии получить доступ к $ собственность-> Аттракцион, даже если я не загружать их в этом запросе. Поэтому я полагаю, что Doctrine делает это внутри, вызывая другой «SELECT». Есть ли способ предотвратить эту автоматическую загрузку, выбросив какое-то исключение? Это поможет мне создавать более быстрые и быстрые запросы.

ответ

-1

Вы посмотрели фактический номер, который он производит?

Пробег: ->getSql(). Вероятно, он выполняет другой запрос, когда вы пытаетесь получить доступ к соответствующему полю.

Если вы хотите этого избежать, не пользуйтесь соответствующими полями!

+0

Да, я пробовал это и нет, он не загружает Attraction. Но я могу получить к ним доступ через $ property-> Attraction. Я хотел бы, чтобы какое-то исключение было брошено, поэтому я не могу ошибиться, когда пишу запрос. Поскольку я делаю действительно большие программы, очень легко пропустить что-то подобное. – Zeljko

+0

Я считаю, что вы можете получить к ним доступ, потому что он вызывает новый запрос, и поэтому он предназначен для поведения. Я думаю, что решение здесь не в изменении машины, а в том, чтобы уделять больше внимания тому, как вы используете машину. – Tom

+0

Да, но идея состоит в том, чтобы предотвратить автоматическую выборку. Очень легко пропустить некоторое присоединение к быстрой разработке больших программ. – Zeljko