我正在使用教程http://www.yiiframework.com/wiki/544/multiple-database-connection-select-database-based-on-login-user-id-dynamic/做多個數據庫連接。代碼在模型中正常工作。但問題是我正在使用擴展,我使用數據庫連接使用Yii ::應用程序() - >數據庫;這裏我得到異常屬性「CWebApplication.dbadvert」未定義。該擴展的控制器從CExtController擴展。請幫忙。使用多個數據庫連接不能用於擴展
0
A
回答
0
我寫了模型中擴展的查詢作爲函數。並在CExtController中創建了該模型的一個實例。然後我打電話給這些功能,一切正常。
0
在您指定的示例中,dbadvert
設置爲自定義活動記錄類RActiveRecord
,不適用於Web應用程序。
如果你想使用它像Yii::app()->dbadvert
,你需要把它架在你的config.php
的components
節這樣
'dbadvert' => array(
'class' => 'CDbConnection'
*params here*
),
UPD
您可以創建CDbConnection包裝部件,這將改變連接字符串任何你想要的方式,並作爲一個Web應用程序組件。
<?php
class CMultiuserDatabaseConnection extends CApplicationComponent {
public function __call($name, $params) {
$db = $this->db;
return call_user_func_array(($db, $name), $params);
}
public $dbConnectionClass = 'CDbConnection';
public $connections = null;
public $defaultConfiguration = null;
public function getDatabaseConfiguration($user) {
if (!$this->connections) { return array(); }
return array_key_exists($user, $this->connections) ? $this->connections[$user] : $this->defaultConfiguration;
}
public function getDb() {
$user = Yii::app()->user;
if ($user->isGuest) { return false; }
$username = $user->name;
$config = $this->getDatabaseConfiguration($username);
if (!$config) { return false; }
$dsn = array_key_exists('dsn', $config) ? $config['dsn'] : null;
if (!$dsn) { return false; }
$user = array_key_exists('user', $config) ? $config['user'] : null;
$password = array_key_exists('password', $config) ? $config['password'] : null;
$result = new $this->dbConnectionClass($dsn, $user, $password);
return $result;
}
}
這部分,你可以設置爲你的「分貝」組件的原始的例子,然後你會得到「連接」選項用於存儲這種方式,每個用戶的配置:
'components' => array(
...
'db' => array(
'class' => "CMultiuserDatabaseConnection",
'connections' => array(
"first-user-name" => array(
// just another db configuration here, for user-one
),
"second-user-name" => array(
// just another db configuration herer, for user two
),
...
),
'defaultConfiguration' => array(
/*
* here goes configuration for all other user, that were not specified
* in connections.
*/
),
),
...
),
相關問題
- 1. 多個數據庫連接不能使用new_link = TRUE和sql.safe_mode = OFF
- 2. 使用LINQ連接多個數據庫
- 3. EntityFramwork,使用多個數據庫/連接
- 4. Cakephp刪除不適用於多個數據庫連接
- 5. 用php連接多個mysql數據庫
- 6. Lumen使用.env中的DB_連接連接到多個數據庫 - 可能嗎?
- 7. Django:擴展避免數據庫連接的用戶模型
- 8. 不能連接數據庫
- 9. 多個數據庫連接
- 10. 多個數據庫連接
- 11. 多個數據庫連接
- 12. postgres.exe:爲什麼多個postgres.exe用於單個數據庫連接?
- 13. 對於多個擴展使用cv :: glob
- 14. 使用NHibernate連接到不同類型的多個數據庫
- 15. 多功能數據庫連接功能
- 16. 用於多個數據庫(碎片)的Java數據庫連接池
- 17. 不能用php連接到一個mongodb數據庫用戶
- 18. 什麼是用於連接多個數據庫
- 19. 基於SubSonic的應用程序,連接到多個數據庫
- 20. 對多個webforms和單個數據庫使用單個連接
- 21. Oracle數據庫連接 - 不使用setUrl
- 22. 使數據庫可擴展
- 23. 使用fnmatch.filter由多於一個可能的文件擴展名
- 24. 如何獲得Access數據庫的「擴展屬性」使用OLEDB或ADO連接
- 25. Java將SSL用於數據庫連接
- 26. ReplaceMent用於Jet Excel數據庫連接?
- 27. SQL連接來自多個數據庫連接的多個表
- 28. 使用PHP PDO擴展刪除MySQL數據庫中的多行
- 29. C#多用戶數據庫連接
- 30. Yii1使用第二個數據庫連接的訪問模型類。多個數據庫連接
但我想動態地改變連接字符串。如果我把它寫在配置文件中,那麼它是不可能的。 – user1690835
請給我一個例子。 – user1690835
如何根據登錄用戶使用此功能來更改數據庫? – user1690835