php - symfony2 - generate entities symfony 4
Cómo administrar consultas de Doctrine con múltiples esquemas de db (2)
Problema resuelto ! No tenía absolutamente nada que ver con el esquema de las bases de datos ni las anotaciones.
En la entidad A, uno de mis setters personales estaba forzando el tipo de parámetro:
public function setB(B $objB) { //... }
... ¡y olvidé usar B''s FQCN! Es por eso que estaba usando el de A.
¡La próxima vez no declararé FQCN en la anotación para obligarme a usarlo al comienzo de mi clase! :)
Tengo una entidad A con una relación ManyToOne con B, pero A y B no pertenecen al mismo esquema DB.
La entidad ''A'' pertenece al paquete MyBundle y la entidad ''B'' pertenece al paquete MyOtherBundle.
La documentación oficial explica cómo trabajar con diferentes conexiones: esquemas múltiples = administrador de entidades múltiples. Pero en mi caso, me gustaría unirme a ambas entidades.
Haciendo :
$this->objEm->getRepository(''MyBundle:MyEntity'')->find($id);
o
$this->objEm->getRepository(''MyBundle:MyEntity'')->getMyResult($id);
Solo llamo a uno de mis repositorios, y creo que no puede obtener el otro porque en mi config.yml puedo elegir solo una conexión.
doctrine:
dbal:
connections:
connection1:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_schema1_user%"
password: "%database_schema1_password%"
service: "%database_service%"
charset: "Windows-1252"
connection2:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_schema2_user%"
password: "%database_schema2_password%"
service: "%database_service%"
charset: "Windows-1252"
orm:
entity_managers:
em1:
connection: connection1
mappings:
MyBundle: ~
MyOtherBundle: ~
em2:
connection: connection2
mappings:
MyOtherBundle: ~
Resultado: Whoops, parece que algo salió mal.
1 / 1ReflectionException: la clase FQCN / Of / MyBundle / Entity / B no existe ...
"Sé que no existe amigo, quiero que veas el buen lugar ahora: como en FQCN / Of / MyOtherBundle / Entity / B"
¿Cómo puedo forzar el camino a mi entidad ''B''?
Si su esquema está en la misma base de datos, simplemente defina las tablas para las entidades como
Bundle/Entity/Class:
type: entity
table: schema.class
(yaml)
No necesitará especificar una segunda conexión. Cuando el esquema se indica explícitamente, estas uniones funcionan perfectamente en la doctrina 2.
Si su esquema se encuentra en bases de datos diferentes, se encontrará con algún problema, porque cada combinación consultará ambas bases de datos; para varias uniones de registros, cada entrada realizará una combinación, lo que significa que realizará una serie de consultas proporcionales a la cantidad de objetos en su conjunto de resultados (BAD).