2012-03-14 14 views
0

私のアプリケーションの要件は、ローカルに接続されたPCにあるmagentoデータベーステーブルのadmin_userなどのデータを表示することです。 私はそれを私のcakephpデータベースの値を表示するなどの変更をする必要がありますし、1ページだけでmagentoのデータベース値を印刷して更新する必要があります。cakephpアプリケーションで2番目のデータベースに接続するにはどうすればいいですか?

私はdatabse.php

public $default = array(
    'datasource' => 'Database/Mysql', 
    'persistent' => false, 
    'host' => 'localhost', 
    'login' => 'root', 
    'password' => '', 
    'database' => 'myappdatabase', 
    'prefix' => '', 
    //'encoding' => 'utf8', 
); 
    var $vsdatabase = array( 
    'datasource' => 'Database/Mysql', 
    'persistent' => false, 
    'host' => '192.168.1.36', 
    'login' => 'root',   
    'password' => '',   
    'database' => 'magento',  
    'prefix' => '', 
    ); 

で2つの変数を保持していると、コントローラに、私は上に書いたが、デフォルトの手段として維持したい

 App::import('Model','ConnectionManager'); 
$db = ConnectionManager::getDataSource('vsdatabase'); 
$database = $db->config['database']; 
$data = $this->User->query("select * from $database.admin_user as t1"); 

ホストは私のローカルデータベースからのものであり、他方がリモートPCのmagentoデータベース もし両方のホストが同じであれば動作するが、それ以外の場合は書き込みが異なる場合は動作しない

だから私はこの問題を解決しますか? Plzソリューションを見つけ出すのに助けてください

答えて

3

あなたがしていることは間違っています。そのコードを使用するとしても、コントローラではなくモデルに属している必要があります。

単にmagentoテーブルの後に名前を付けた新しいモデルを作成しますが、私はmagentoなどで接頭辞を付けます。モデルは、このdb接続を使用するように構成する必要があります。

class MagentoUser extends AppModel { 
    public $useDbConfig = 'vsdatabase'; 
} 

また、ClassRegistryを使用して、他のエイリアスとデータソースを使用して、モデルを初期化することもできます。 http://api20.cakephp.org/class/class-registry#method-ClassRegistryinit

一般的なSQLクエリを使用しないようにしておくと、安全でないクエリの作成が終わり、CakePHP ORMの他の機能が失われる可能性が非常に高くなります。

関連する問題