带有 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);
}
希望对您有所帮助!
我正在开发一个项目,用户可以使用 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);
}
希望对您有所帮助!