带有 Sqlite3 的 CakePHP:如何连接到多个 sqlite 文件?

CakePHP with Sqlite3: How to connect to multiple sqlite file?

我正在开发一个项目,用户可以使用 CakePHP v2.6.5 注册并获得免费的在线商店。我正在使用共享主机,所以我无法为他们创建 Mysql 数据库,所以我改用 sqlite。因为我也需要将它与移动应用程序一起使用。在我的代码中,我在用户注册后为用户动态创建 sqlite 文件。但我不知道如何在 CakePHP 中更改数据库路径。我所知道的是 CakePHP 在 config/database.php 文件中使用配置,但我无法动态初始化它。

在我的 config/database.php 文件中:

public $sqliteDB = array(
    'datasource' => 'Database/Sqlite',
    'persistent' => false,
    //'database'=>'',
    'prefix' => '',
    'encoding' => 'utf8'
);

我试图遵循这些 link: CakePHP switch database (using same datasource) on the fly? 这个 link Cakephp can't change database on-the-fly,但我一无所获

我通过在模型的 __construct() 方法中即时创建 ConnectionManager 来弄清楚如何做到这一点。但是我将它与 multi table 一起使用,所以这里是我的代码

在 AppModel 中:

public function connectSqlite()
{
    App::uses('CakeSession', 'Model/Datasource');
    $shop = CakeSession::read('SHOP');    //just read Session for shop's name, because i create a directory and store sqlite in it. Directory name base on shop name that user defined when user registerd.
    if($shop)
    {
        $dbName=FILES_URL.'shops'.DS.$shop['name'].DS.'database'.DS.'database.sqlite';    //Sqlite file path
        $sqliteDB = array(
            // Set correct database name
            'datasource' => 'Database/Sqlite',
            'persistent' => false,
            'database'=>$dbName,
            'prefix' => '',
            'encoding' => 'utf8'
        );
        // Add new config to registry
        ConnectionManager::create($dbName, $sqliteDB);    //create ConnectionManager and return it to derived class.
        // Point model to new config
        return $dbName;
    }
}

在产品型号中:

public function __construct($id = false, $table = null, $ds = null)
{
    $dbName=parent::connectSqlite();
    if($dbName){
        $this->useDbConfig=$dbName;
    }
    parent::__construct($id, $table, $ds);
}

希望对您有所帮助!