如何在 Silverstripe 中使用第二个数据库
How to use a second database in Silverstripe
我试图在 _config.php
中声明一个新的数据库
global $databaseConfig2;
$databaseConfig2 = array(
"type" => 'MySQLDatabase',
"server" => 'localhost',
"username" => 'local_dbuser',
"password" => 'aPassword',
"database" => 'local_db2',
"path" => '',
);
然后切换到我需要使用的控制器中的第二个数据库:
public function doStuff() {
global $databaseConfig, $databaseConfig2;
// connect to DB 2
DB::connect($databaseConfig2);
// create a query.. this will go to "databaseB"
$query = new SQLQuery("*", "MyTable");
$result = $query->execute();
// do something with the result...
// when done, switch back to the regular DB Config
DB::connect($databaseConfig);
}
我从 http://www.silverstripe.org/community/forums/customising-the-cms/show/13692 拿来的。但它不起作用。
另外,我尝试了这段代码,将表单中的任何值插入到这个单独的数据库中。
SecureFormInput.php
class SecureFormInput extends DataObject{
global $databaseConfig, $databaseConfig2;
DB::connect($databaseConfig2);
private static $db = array(
'FirstName' => 'Varchar',
'SureName' => 'Varchar',
'OtherName' => 'Varchar',
'DateOfBirth' => 'Date',
'Gender' => 'Boolean'
);
private static $has_one = array(
'SecureForm' => 'SecureForm'
);
DB::connect($databaseConfig);
}
您遇到的问题是另一个数据库未由 SilverStripe 管理,因此您无法使用 "ORM" 方法。您可以通过 DB::Query('SELECT * FROM Table') 使用常规 SQL 语句,例如可以放置/替换 Page.php 初始化函数...
function init() {
parent::init();
//...
global $databaseConfig, $databaseConfig2;
DB::connect($databaseConfig2);// connect to DB 2
$query = DB::Query("SELECT MyData FROM MyTestTable");
foreach ($query as $row) var_dump($row);
DB::connect($databaseConfig);// when done, switch back to the regular DB
//...
}
如果要写入数据,则需要在 DB::Query
中再次使用完整的 INSERT 或 UPDATE 语句
我试图在 _config.php
中声明一个新的数据库global $databaseConfig2;
$databaseConfig2 = array(
"type" => 'MySQLDatabase',
"server" => 'localhost',
"username" => 'local_dbuser',
"password" => 'aPassword',
"database" => 'local_db2',
"path" => '',
);
然后切换到我需要使用的控制器中的第二个数据库:
public function doStuff() {
global $databaseConfig, $databaseConfig2;
// connect to DB 2
DB::connect($databaseConfig2);
// create a query.. this will go to "databaseB"
$query = new SQLQuery("*", "MyTable");
$result = $query->execute();
// do something with the result...
// when done, switch back to the regular DB Config
DB::connect($databaseConfig);
}
我从 http://www.silverstripe.org/community/forums/customising-the-cms/show/13692 拿来的。但它不起作用。
另外,我尝试了这段代码,将表单中的任何值插入到这个单独的数据库中。
SecureFormInput.php
class SecureFormInput extends DataObject{
global $databaseConfig, $databaseConfig2;
DB::connect($databaseConfig2);
private static $db = array(
'FirstName' => 'Varchar',
'SureName' => 'Varchar',
'OtherName' => 'Varchar',
'DateOfBirth' => 'Date',
'Gender' => 'Boolean'
);
private static $has_one = array(
'SecureForm' => 'SecureForm'
);
DB::connect($databaseConfig);
}
您遇到的问题是另一个数据库未由 SilverStripe 管理,因此您无法使用 "ORM" 方法。您可以通过 DB::Query('SELECT * FROM Table') 使用常规 SQL 语句,例如可以放置/替换 Page.php 初始化函数...
function init() {
parent::init();
//...
global $databaseConfig, $databaseConfig2;
DB::connect($databaseConfig2);// connect to DB 2
$query = DB::Query("SELECT MyData FROM MyTestTable");
foreach ($query as $row) var_dump($row);
DB::connect($databaseConfig);// when done, switch back to the regular DB
//...
}
如果要写入数据,则需要在 DB::Query
中再次使用完整的 INSERT 或 UPDATE 语句