Можно ли отключить отслеживание объектов? - PullRequest
0 голосов
/ 09 июля 2019

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

У меня есть сущность с именем Item, которая ссылается на категорию, имея как $category_id, так и $categoryполе.У последнего есть отношения, настроенные с @ORM\ManyToOne() и @ORM\JoinColumn(), работающие правильно.

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

$this->categoryRepository->findBy(...);

...

$items = $this->itemRepository->findBy(...);
return $this->respond($items);

Здесь, $элементы items [0] -> будут заполнены платформой к тому времени, когда выполнение достигнет оператора return.

Возможно ли отключить это поведение?

1 Ответ

0 голосов
/ 09 июля 2019

Вы можете указать политику fetch для отношения, равную EXTRA_LAZY, при этом будет получено наименьшее количество дат при выполнении, насколько это возможно. За документы :

В Doctrine 2.1 для ассоциаций введена функция Extra Lazy. По умолчанию ассоциации помечаются как ленивые, что означает, что весь объект коллекции для ассоциации заполняется при первом обращении к ней.

Итак, в вашей аннотации @ORM\ManyToOne() добавьте параметр: fetch="EXTRA_LAZY" к другим.

...