¿Cómo pueden los campos públicos “romper la carga diferida” en Doctrina 2?

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

  •  28-09-2019
  •  | 
  •  

Pregunta

Cuando corro doctrine orm:validate-schema, que aparece un montón de advertencias acerca de mis columnas asignadas ser público y no el uso de métodos de captador / definidor para envolverlos. Se dice que "rompen carga lenta". Puedo entender cómo elaborar las colecciones asociadas público podría ser problemático (yo no incurra en estas privada y se envuelven), pero ¿es esto un problema para los campos en el objeto? Los campos que se cargan en su totalidad, que yo sepa.

¿Fue útil?

Solución

Me voy a dar una oportunidad en esto aunque no estoy sin duda un experto Doctrine2.

Desde mi uso (limitado) y la prueba parece Doctrina le puede dar un objeto relacionado sin cargar los datos para ese objeto . En ese momento las propiedades públicas se romperán carga diferida.

Doctrina es la carga diferida en el punto donde los datos persistieron se solicita, no cuando se solicita el objeto que contiene datos persistentes.

Actualización: Me tomó un vistazo a la real código proxy y parece que mi entendimiento original sobre todo correcto. El objeto proxy no se carga en sí hasta que se llama un método del objeto. Por lo que cualquier solicitud para una propiedad pública no cargar los datos.

Otros consejos

Tenga en cuenta que ahora Doctrina 2.4 soportes de proxy objetos para ENTIDADES con propiedades públicas .

Marco Pivetta 's sitio web explica cómo funciona :

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)
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top