我正在尝试在模型内部使用数据库连接,但是由于“找不到类'app \ models \ DB'”,因此未建立连接并引发错误。我创建了一个通用模型,该通用模型将由模块中的所有模型扩展,这意味着所有模型都扩展了CommonModel,我在CommonModel中遇到此错误。我已经阅读了有关数据库连接的yii文档,并用google搜索了同样的内容,但是找不到任何解决方案。我的代码是:
models \ CommonModel.php
namespace app\models;
use Yii;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\helpers\Security;
use yii\web\IdentityInterface;
use yii\db\Query;
use app\models\Mailsettings;
use \PDO as PDO;
class CommonModel extends \yii\db\ActiveRecord{
protected $_db;
protected $_sql;
public function __construct()
{
$this->_db = DB::init(); // This line causing the error
$pdo = Timetrackdb::getPdoConnection();
}
----
----
}
config / db.php和config / db2.php
return [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=my_db_name',
'username' => 'db_username',
'password' => 'db_password',
'charset' => 'utf8',
];
config / web.php
$db = require __DIR__ . '/db.php';
$db2 = require __DIR__ . '/db2.php';
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'modules' => [
'my_module1' => [
'class' => 'app\modules\my_module1'
],
'my_module2' => [
'class' => 'app\modules\my_module2'
],
],
------
------
'db' => $db,
'db2' => $db2,
------
------
];
我创建了2个模块,其中一个模块在使用相同类型的数据库连接时可以正常工作,但另一个模块的db连接不能正常工作。谁能告诉我这段代码有什么问题吗?谢谢。
答案 0 :(得分:2)
Yii为您处理连接到数据库的过程,您不需要PDO
。如果您想拥有Yii::$app->db2
或派生的ActiveRecord类以将第二个数据库用作其数据存储,只需访问CommonModel
:
class CommonModel extends ActiveRecord {
public static function getDb()
{
// this will cause Yii to use the database configured as 'db2' in config/web.php
return Yii::$app->db2;
}
}
class Car extends CommonModel { }
// will try to insert a new row in `db2`.`car`
(new Car)->save();
如果要执行跨模式查询(config/db2.php
),则可能还需要执行以下操作:
return [
// ...
// add and adjust the keys below
'tablePrefix' => '',
'schemaMap' => [
'mysql' => [
'class' => 'yii\db\mysql\Schema',
'defaultSchema' => 'my_db_name',
],
],
];