2017-07-20 20 views
0

私はCakePHP 3.4.6 Webアプリケーションを持っています。実際には(ケーキ・コンベンションでは書かれていない)レガシー・データベース表で動作しているため、TableEntityクラスを設定しようとするのではなく、すべてのSQL問合せを手作業でコーディングすることを選択しました。私はいくつかの人々がこれに同意しないだろうが、それは問題のポイントではないことを認識しています。CakePHP 3 - ORMなしで複数のデータベース接続を使用する*

私はデータベースが3つあります:app_dbusers_dbextra_dbです。

私は各1への接続を設定したようにconfig/app.php:私はsrc/Model/MyModel.phpにあるカスタムモデルファイルを持っている

'Datasources' => [ 
    'default' => [], // 'app_db' credentials 
    'users_db' => [], // 'users_db' credentials 
    'extra_db' => [], // 'extra_db' credentials 
]; 

namespace App\Model; 

use Cake\Datasource\ConnectionManager; 

class MyModel 
{ 
    protected $connection; 

    public function __construct() 
    { 
     $this->connection = ConnectionManager::get('default'); 
    } 

    public function getData() 
    { 
     $sql = ''; // some SQL query 
     $stmt = $this->connection->prepare($sql); 
     $stmt->execute(); 
     return $stmt->fetchAll('assoc'); 
    } 
} 

それはapp_dbにマップdefaultのための接続を取得するので、これは動作します。それはデータベース(app_db)のにクエリを実行するために使用されている例は、このように動作します。

しかし、データを取得する必要があるクエリをapp_dbから、JOINをusers_dbから実行する必要があります。

SQLを他のデータベースと通信できるようにモデルでこれを設定するにはどうすればよいですか?

答えて

0

簡単な方法では、別の方法をとると、魔女は接続を変更します。

public function switchConnection($connection=''){ 
$this->connection = ConnectionManager::get(connection); 
} 

終わり、あなたがたgetDataの次回実行時

MyModel->switchConnection('app_db'); 

変更接続のためにそれを呼び出すことはapp_dbの代わりに、デフォルトでcomunicateます。

関連する問題