seguridad relacional obtener modelo logico instancia fisico esquema datos symfony1 doctrine schema

symfony1 - relacional - Symfony Doctrine Database Relación de esquemas con diferentes bases de datos



instancia y esquema en base de datos (2)

@Dziamid tiene la mitad de razón.

Técnicamente no puede unir dos tablas a una base de datos separada. Pero puedes fingir que sería una intervención real.

Configurar conexiones de bases de datos múltiples

//databases.yml all: items_db: class: sfDoctrineDatabase param: dsn: mysql://login:passwd@localhost/items stores_db: class: sfDoctrineDatabase param: dsn: mysql://login:passwd@localhost/stores

Definir la conexión adecuada para cada modelo

//schema.yml Item: connection: items_db columns: store_id: integer(4) relations: Store: local: store_id foreign: id foreignAlias: Items Store: connection: stores_db columns: name: string(255)

Ahora puede usar sus modelos de Doctrine como lo haría normalmente:

// like this $item = new Item(); $store = new Store(); $store->save(); $item->setStore($store); // or like this $item->getStore();

La única limitación es que NO PUEDE hacer uniones en consultas DQL.

$query = Doctrine_Query::create() ->from(''Store s'') ->leftJoin(''s.Items i'') ->fetchAll();

Pero puedes cargar relaciones usando Doctrine_Collections.

$stores = Doctrine::getTable(''Store'')->findAll(); // this returns a Doctrine_Collection $stores->loadRelated(''Items'');

Esto funciona igual que Doctrine_Query.

Estoy teniendo este problema sobre el diseño de esquema de base de datos de doctrina.

Suponiendo que tengo 2 bases de datos, A y B.

Ya hice el esquema A de la base de datos, y ahora necesito hacer el esquema B de la base de datos. En la base de datos B, una de las tablas tiene relación con la tabla de la base A de la base de datos. Este es el problema, ¿cómo puedo relacionar B con A? o tal vez es imposible?

necesito ayuda CUANTO ANTES


No puede tener una relación entre tablas en diferentes bases de datos. Si lo hace, terminará con un error de restricción de clave externa. Sin embargo, lo que puede hacer es dejar un campo relation_id desnudo y cargar manualmente datos relacionados de otra conexión. Por ejemplo:

Item: columns: store_id: integer(4) #relations: # Store: # local: store_id # foreign: id # foreignAlias: Items Store: columns: name: string(255) class Item extends BaseItem { protected $_store = null; public function getStore() { if (null == $this->_store) { $this->_store = Doctrine::getTable(''Store'')->findOneById($this->store_id); } return $this->_store; } public function setStore(Store $store) { $this->store_id = $store->id; } }

Ahora puede trabajar con Item y Store como si estuvieran relacionados:

$item = new Item(); $store = new Store(); $store->save(); $item->setStore($store);