Duda Respecto A Dos Bases De Datos Relacionados Por Modelos

Hola buenos días a todos.

Les agradecería que me despejen una duda.

No se si me estoy saltando de algo importante.




//modelo pacienteEmbarazo

'NAC_CERTIFICADOS'=>array(self::HAS_ONE,'NacCertificados','ID_PACIENTE_EMBARAZO')


//modelo NacCertificados, este se conecta a otra base de datos.

'FOL_FOLIOS'=>array(self::BELONGS_TO,'FolFolios','ID_FOLIO')


//Consulta:

$folios = PacientesEmbarazos::model()->with('NAC_CERTIFICADOS.FOL_FOLIOS')->together()->findAll('ID_PACIENTE_EMBARAZO = :ID', array(':ID'=>$_REQUEST['ID_PACIENTE']));




La cuestión es que, al realizar la consulta me dice que la tabla nac_certificados no existe en la primera base de datos.

No se porque Yii usa la base de datos del primer modelo y no usa la base de datos de cada modelo.

No se si esto es un defecto de yii, o es que hay que configurar algo más.

Espero me ayuden a resolver mi duda y de igual manera espero que me haya expresado lo más correcto posible.

Hola, no he utilizado consultas sobre 2 BBDD en Yii pero debería funcionar si el usuario tiene permiso en ambas BBDD.

Supongo:

bd1 = base de datos 1

bd2 = base de datos 2

supongo que en el modelo de la bd2 tienes:




public function tableName(){

	return 'bd2.tabla';

}



Con esto una consulta simple debería funcionar, sin joins.

Con joins esto dices que falla…

No se prueba en las relaciones a poner la base de datos también aunque lo que si necesitarás es activar algún logger para ver que sql se esta generando.

Al final es hacer algunas pruebas, comenta si consigues algo y suerte.

Hola, disculpa la demora. Olvide responder. Efectivamente, en el método tableName() se antopone el nombre de la base de datos, pero eso no es todo.

La clave está tambien en la conexión. Editamos el main.php

Queda de este modo.




'general'=>array(

			'connectionString' => 'mysql:host=192.20.1.202;', //web

                        'class'=>'CDbConnection',

			'emulatePrepare' => true,

			'username' => 'root', //web

                        'password' => 'eqJZ',

			'charset' => 'utf8'

		),



Como puedes apreciar en connectionString, no me conecto a ninguna base de datos, unicamente habro la conección.

Y de esta manera funciona.

Ahora bien. A la hora de realizar transacciones queda de este modo.

$conexion = Yii::app()->general->beginTransaction();

//guardamos en las tablas.

$conexion->commit();

Nota: No olvidarnos que en el método getDbConnection(), tenemos que conectarnos a "general".

Si nos conectamos a otra conexión simplemente no funcionará.