Uso de Doctrine ORM en 2016 con una experiencia aproximada ~ 2 - 2,5 años.
inherente inconsistencia
SELECT i, p
FROM \Entity\Item i
JOIN i.product p
WHERE ...
Supongamos entidades son Item
y Product
. Están conectados a través de Item.product_id
a Product.id
, y Product
contiene Product.model
que queremos mostrar junto con Item
.
Aquí es la recuperación de la misma "product.model" de la base de datos, utilizando el SQL anterior pero variando los parámetros de SQL:
//SELECT i, p
$ret[0]->getProduct()->getModel();
//SELECT i as item, p as product
$ret[0]['item']->getProduct()->getModel();
//SELECT i as item, p.model as model
$ret[0]['model'];
punto que estoy haciendo es la siguiente:
estructura de conjunto de resultados de salida se puede cambiar drásticamente dependiendo de cómo se escribe la instrucción DQL/ORM SELECT.
De una matriz de objetos a una matriz de matriz asociativa de objetos, a una matriz de matriz asociativa, según cómo desee SELECT
. Imagine que tiene que hacer un cambio en su SQL, luego imagine tener que volver a su código y volver a hacer todo el código asociado con la lectura de los datos del conjunto de resultados. ¡Ay! ¡Ay! ¡Ay! Incluso si se trata de unas pocas líneas de código, depende de la estructura del conjunto de resultados, no existe un estándar común de desacoplamiento completo.
lo que la doctrina es bueno en
En cierto modo, elimina ocupan de SQL, la elaboración y el mantenimiento de sus propias tablas. No es perfecto A veces falla y debe dirigirse a la línea de comando de MySQL y escribir SQL para ajustar las cosas hasta el punto donde Doctrine y usted están contentos, donde Doctrine ve los tipos de columna como válidos y hasta donde está satisfecho con los tipos de columnas. No tiene que definir sus propias claves o índices foráneos, está hecho para usted automáticamente.
lo que la doctrina es malo en
Siempre que necesite traducir cualquier SQL avanzado significativamente a DQL/ORM, puede tener dificultades. Aparte de eso, también puede lidiar con inconsistencias como la anterior.
Consideraciones finales
amo Doctrina para la creación/modificación de tablas para mí y para la conversión de datos de la tabla de objetos, y la persistencia de nuevo, y para el uso de declaraciones preparadas y otros controles y equilibrios, haciendo que mis datos seguros .
Me encanta la sensación de almacenamiento persistente a cargo de Doctrine desde la interfaz orientada a objetos de PHP. Tengo la sensación de que puedo pensar en mis datos como parte de mi código, y ORM se encarga de las cosas sucias de interactuar con la base de datos. La base de datos se parece más a una variable local y he ganado el aprecio de que si cuidas tus datos, te amará de nuevo.
Odio Doctrine por sus inconsistencias y curva de aprendizaje difícil, y tener que buscar sintaxis patentada para DQL cuando sé cómo escribir cosas en SQL. El conocimiento de SQL está disponible, DQL no tiene tantos expertos en la naturaleza, ni un cuerpo acumulado de conocimiento (en comparación con SQL) para ayudarte cuando te quedas atascado.
Holy cow! ¡Una pregunta antigua y estimulante con miles de visitas y una docena de respuestas que * NO HA * sido cerrada por la multitud de Not productive questions! A ++! –