Как публичные поля могут «разбить ленивую погрузку» в доктрине 2?

StackOverflow https://stackoverflow.com/questions/4090609

  •  28-09-2019
  •  | 
  •  

Вопрос

Когда я бегу doctrine orm:validate-schema, он всплывает кучу предупреждений о моих сопоставленных колоннах, являющихся публичными, и не используя методы Getter / Setter, чтобы обернуть их. Он говорит, что они «ломают ленивую нагрузку». Я могу понять, как дела Ассоциированные коллекции Общественность может быть проблематичной (я делаю эти частные и обертывающие их), но как это проблема для полей на объекте? Поля наполнены в полном объеме, к моему знанию.

Это было полезно?

Решение

Я дам выстрел на это, хотя я, конечно, не эксперт доктрины2.

Из моего (ограниченного) использования и тестирования кажется, что доктрина может дать вам связанный объект без загрузки данных для этого объекта. Отказ В этот момент общественные свойства сломают ленивую нагрузку.

Доктрина ленивая загрузка в точке, где запрашивается сохраненные данные, а не когда объект, который содержит сохраненные данные.

Обновлять: Я посмотрел на Фактический прокси-код И кажется, что мое первоначальное понимание было в основном правильно. Прокси-объект не загружен до тех пор, пока не вызывается метод объекта. Таким образом, любой запрос на публичную собственность не загрузит данные.

Другие советы

Обратите внимание, что доктрина 2.4 сейчас Поддерживает прокси-объекты для реакторов с публичными свойствами.

Марко Пиветтавеб-сайт объясняет как это устроено:

class Customer {
    public $name;
    public $surname;
}

class CustomerProxy extends Customer {
    public function __construct(Customer $customer) {
        unset($this->name, $this->surname);
        $this->customer = $customer;
    }
    public function __set($name, $value) {
        $this->customer->$name = $value;
    }

    public function __get($name) {
        return $this->customer->$name;
    }
    // __isset, __unset, __clone, __sleep, __wakeup (or serialize/unserialize)
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top