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);