sql >> Databáze >  >> RDS >> Mysql

Jak dynamicky používat více databází pro jeden model v CakePHP

Tento pán (Olivier ) měl stejný problém! (Před rokem) Napsal malá úprava pro Controller s! Je docela malý a ukázalo se, že funguje v 1.3 a 2.x .

Každopádně toto je moje konečné řešení, které jsem vložil do 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;
    }
}

A zde je návod, jak jsem to použil ve své 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);
  }

}

Vsadím se, že nejsem první ani poslední, kdo má tento problém. Takže opravdu doufám, že tyto informace najdou lidi a komunitu CakePHP.



  1. Výhody používání zápisu ordinální pozice SQL?

  2. Jak najít všechny tabulky se sloupcem identity v databázi SQL Server - SQL Server / Výukový program T-SQL, část 45

  3. Jak Cosh() funguje v PostgreSQL

  4. Jak najít hranice skupin souvislých pořadových čísel?