2014-12-01 112 views
0

所以,我有我的database.php文件如下:CakePHP useDbConfig不起作用?

public $default = array(
    'datasource' => 'Database/Mysql', 
    'persistent' => false, 
    'host' => 'SOMEHOST', 
    'port' => 8889, 
    'login' => 'LOGIN', 
    'password' => 'PASSWORD', 
    'database' => 'DB1', 
    'prefix' => '', 
    'encoding' => 'utf8', 
); 

public $db2 = array(
    'datasource' => 'Datasources.Freetds', 
    'persistent' => false, 
    'host' => 'SOMEHOST', 
    'port'=> 1433, 
    'login' => 'LOGIN', 
    'password' => 'PASSWORD', 
    'database' => 'DB2', 
    'prefix' => '', 
    'encoding' => 'utf8', 
); 

然後我有試圖「發現」在一個DB一些字段,以便它可以在其他數據庫等領域的交叉檢查一些shell代碼如下:

(...) 
$qry = $this->Model1->find('all', array(
     'fields' => array('Model1.id','Model1.field1'), 
     'conditions' => array(
      'Model1.field2' => 'WAITING'), 
     'recursive' => -1)); 

    $this->loadModel('Model2'); 
    $num_reg=count($qry); 
    for ($loop=0; $loop<$num_reg;$loop++) { 
     $registro = $this->Model2->find("first", array(
      'recursive' => -1, 
      'fields' => array ('Model2.field1', 'Model2.field2'), 
      'conditions' => array ('Model2.field1' => $qry[$loop]['Model1']['field1']))); 
     var_dump($registro); 
    (...) 

型號1使用$default和模型2使用$db2。 Model2.php如下(摘錄):

public $useTable = 'Table'; 
public $primaryKey = 'key'; 
public $useDbConfig = "db2"; 

不幸的是,CakePHP的似乎並沒有被交換連接和/或數據塊,因爲我得到Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Model2.field1' in 'field list'

調試表明CakePHP在構建SQL語句(select ... from DEFAULT.MODEL2TABEL as MODEL2 ....)時嘗試使用默認數據庫。

任何想法?

在此先感謝!

+0

順便說一句,你可以看到'persistent'設置爲false在這兩個CONFIGS – Pbal 2014-12-01 19:44:03

回答

0

我經歷了CakePHP的文檔,並沒有理解爲什麼這不起作用,但我確實找到了一個合適的方法,這是記錄在案的,所以我不會評價它「不雅」。如果您不同意我的回答,請不要「減1」我......此解決方案可以解決我的問題。

我將繼續尋找「正確」(最好)的方法,並最終回到這裏後......

無論如何,CakePHP允許設置模型的數據源「對飛」,這也正是結束爲我工作。

只是在$this->loadModel('Model');之後放置一條線,如$this->Model->setDatasource('datasource');,它的功能就像一個魅力。

這解決了我的問題,在一個外殼,但由於該方法是模型類下,它可能會在控制器工作,以及(http://api.cakephp.org/2.4/class-Model.html#_setDataSource

0

這裏的問題是,該方法:

$this->loadModel('Model'); 

以某種方式不能正確啓動模型。

你應該用傳統的方式:

App:uses('MyModel', 'Model'); 
$this->MyModel = new MyModel(); 

我有一個很難搞清楚了這一點。這也可以解決很多其他問題。
我建議你選擇,以避免在今後再次使用loadModel() ...