在yii2中找不到类“ yii \ app \ models \ DB”

时间:2018-07-13 07:25:25

标签: database model yii2

我正在尝试在模型内部使用数据库连接,但是由于“找不到类'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连接不能正常工作。谁能告诉我这段代码有什么问题吗?谢谢。

1 个答案:

答案 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',
      ],
  ],
];