Как избежать symfony2 для автоматической загрузки отношений один-к-одному - PullRequest
3 голосов
/ 05 января 2012

У меня есть класс User, который имеет связь «один к одному» с другим объектом. Результат

Все работает нормально, но каждый раз, когда я загружаю набор пользователей, я вижу в профилировщике, что для каждого пользователя symfony делает запрос для загрузки своего результата.

Мне не нужен результат везде, и я получаю его вручную, когда мне нужно. Я пришел к выводу, что Symfony автоматически загружает отношения один-к-одному с сущностью, но не нашел, как этого избежать.

Мои занятия:

class User extends BaseUser {
    /**
     * @ORM\OneToOne(targetEntity="Result", mappedBy="user", cascade={"all"}, orphanRemoval=TRUE)
     */
     protected $result;
}

class Result {
    /**
     * @ORM\OneToOne(targetEntity="User", inversedBy="result")
     * @ORM\JoinColumn(name="id_user", referencedColumnName="id")
     */
    protected $user;
 }

----- РЕДАКТИРОВАТЬ -----

Я обнаружил, что это происходит только тогда, когда сущность User загружается в formbuilder:

$builder
    ->add('user', 'entity', array(
        'class' => 'ThemBaseBundle:User',
        'query_builder' => function($repository) {
            return $repository->createQueryBuilder('a')
            ->orderBy('a.lastName', 'ASC');
        },
        'property' => 'fullName'
    ))
;

1 Ответ

2 голосов
/ 05 января 2012

Я не уверен, но, по-видимому, отношения один-к-одному охотно выбираются по умолчанию. Попробуйте переключить выборочную стратегию на ленивую. См. этот раздел для получения дополнительной информации.

...