Peguei um sistema para desenvolver que seria basicamente um orçamento online, mais o banco de dados fica na loja física dessa empresa, e o banco de dados é firebird
Bom até ae tudo bem, apanhei uns 3 dias para fazer funcionar o firebird local mais consegui hehehe
O unico problema ou digamos que seja quase impossivel, mais tem alguma forma de fazer o Model Generator do Gii, pegar outra conexão do banco dados? Vou usar o ‘db’ para gerenciar a administração, mais o produtos e pedidos vou fazer direto com outro banco de dados ‘fb’.
Por padrão o Gii pega a conexão ‘db’, queria gerar os model do ‘fb’, eu comento o ‘db’, e no ‘fb’ coloco ‘db’, ai funciona, é possível gerar sem fazer essa invensão toda?
Criei em protected/components/FirebirdActiveRecord.php
<?php
abstract class FirebirdActiveRecord extends CActiveRecord {
const BELONGS_TO='CBelongsToRelation';
const HAS_ONE='CHasOneRelation';
const HAS_MANY='CHasManyRelation';
const MANY_MANY='CManyManyRelation';
const STAT='CStatRelation';
/**
* @var CDbConnection the default database connection for all active record classes.
* By default, this is the 'db' application component.
* @see getDbConnection
*/
public static $db;
private static $_models = array(); // class name => model
private $_md; // meta data
private $_new = false; // whether this instance is new or not
private $_attributes = array(); // attribute name => attribute value
private $_related = array(); // attribute name => related objects
private $_c; // query criteria (used by finder only)
private $_pk; // old primary key value
/**
* Returns the database connection used by active record.
* By default, the "db" application component is used as the database connection.
* You may override this method if you want to use a different database connection.
* @return CDbConnection the database connection used by active record.
*/
public function getDbConnection() {
if (self::$db !== null)
return self::$db;
else {
// Create CDbConnection and set properties
self::$db = new CDbConnection();
foreach (Yii::app()->fb as $key => $value)
self::$db->$key = $value;
// Uncomment the following lines to prove that you have two database connections
CVarDumper::dump(Yii::app()->db);
echo '<br />';
CVarDumper::dump(Yii::app()->fb);
die;
if (self::$db instanceof CDbConnection) {
self::$db->setActive(true);
return self::$db;
}
else
throw new CDbException(Yii::t('yii', 'Active Record requires a "db" CDbConnection application component.'));
}
}
}
?>
E no Model fico assim:
class AGENDA extends FirebirdActiveRecord{}
Isso funciona?
Se eu usar AGENDA::model()->findAll(), ele me traz tudo? Se eu precisa ficar usando consulta sql pura?
Por que um site que fiz pra um amigo, eu usei o ‘db’ e ‘db2’, mais o dois era mysql, eu chama por SQL fazia a query depois usava Yii::app()->db2->createCommand($sql)->query();
Se o ‘AGENDA::model()->findAll()’ funcionar, cada dia que passa o Yii se e me supera! hehe