sql >> データベース >  >> RDS >> Mysql

CakePHPの1つのモデルに複数のデータベースを動的に使用する方法

    この紳士 Olivier )同じ問題がありました! (1年前)彼は書いた Controllerの小さな適応 s!かなり小さく、 1.3で動作することがわかりました。 および2.x

    とにかく、これが私の最終的な解決策であり、app/Model/AppModel.phpに入れました :

    class AppModel extends Model
    {
      /**
       * Connects to specified database
       *
       * @param String name of different database to connect with.
       * @param String name of existing datasource
       * @return boolean true on success, false on failure
       * @access public
       */
        public function setDatabase($database, $datasource = 'default')
        {
          $nds = $datasource . '_' . $database;      
          $db  = &ConnectionManager::getDataSource($datasource);
    
          $db->setConfig(array(
            'name'       => $nds,
            'database'   => $database,
            'persistent' => false
          ));
    
          if ( $ds = ConnectionManager::create($nds, $db->config) ) {
            $this->useDbConfig  = $nds;
            $this->cacheQueries = false;
            return true;
          }
    
          return false;
        }
    }
    

    これが、app/Controller/CarsController.phpでの使用方法です。 :

    class CarsController extends AppController
    {
      public function index()
      {
        $this->Car->setDatabase('cake_sandbox_client3');
    
        $cars = $this->Car->find('all');
    
        $this->set('cars', $cars);
      }
    
    }
    

    私は賭けています、私はこの問題の最初でも最後でもありません。ですから、この情報が人々とCakePHPコミュニティを見つけることを本当に望んでいます。



    1. 行が変更された場合にのみ、更新後にMySQLトリガー

    2. postgresのUPDATERETURNING句から選択できません

    3. SQL Server(T-SQL)で特定の言語に使用されている日付形式を見つける方法

    4. SQLServerでの長年にわたる文字列の集約