1
在一個模塊上我添加了一個名爲db的組件,就像主要的Yii組件,數據庫連接的數據一樣,我需要在我的模塊中每次使用在他的配置中爲所有模型指定的數據庫,而不是主數據庫連接,我該如何做到這一點?我如何強制yii2模塊爲他的所有模型使用特定的連接?
在一個模塊上我添加了一個名爲db的組件,就像主要的Yii組件,數據庫連接的數據一樣,我需要在我的模塊中每次使用在他的配置中爲所有模型指定的數據庫,而不是主數據庫連接,我該如何做到這一點?我如何強制yii2模塊爲他的所有模型使用特定的連接?
你有幾種方式,例如。使用的應用程序分離的構造/配置/ main.php 例如添加特定dbMyMod組分配置
return [
// ...
'components' => [
// ...
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=example',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
'dbMyMod ' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=hostForMudle;dbname=module_db_name',
'username' => 'user_module_name',
'password' => 'password',
'charset' => 'utf8',
],
],
,或者不需要在應用程序的靜態配置單程/ confing
可以基於一個模塊函數返回一個適當的數據庫連接
public function myModuleDbCon()
{
$myDbCon = new yii\db\Connection([
'dsn' => 'mysql:host=localhost;dbname=example',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
]);
return myDbConn;
}
然後在你模塊,您可以retrive模塊數據庫連接
aDbConn = Yii::$app->getModule('my_module_name')->myModuleClass->myModuleDbCon();
。
$command = $aDbConn->createCommand('SELECT * FROM myTable');
$result= $command->queryAll();
感謝,第二種方式是我的目的,更好的,只有一個問題多:一些谷歌上搜索我的問題後,我發現模型'getDb()'函數(在這個問題[鏈接質疑(HTTPS相關://stackoverflow.com/questions/27254540/multiple-database-connections-and-yii-2-0)),但是如果我已經在模塊配置中設置了一個db組件,我如何從模型中訪問這個組件,更多在模塊的模型中泛型如何訪問模塊實例?如果我在配置中使用模塊的名稱,名稱必須始終是相同的名稱(在多個站點上共享的模塊) – MarBer
您可以使用'Yii :: $ app-> your_compenent_name'訪問組件。你可以訪問param作爲鍵值數組(或作爲一個obbject ..我不記得了))..但實際上是一樣的是在myModuleDbCon ..只是改變你分配參數的地方.. – scaisEdge