【问题标题】:Using preloaded connection instance in Yii2在 Yii2 中使用预加载的连接实例
【发布时间】:2016-04-21 13:08:26
【问题描述】:

我是 Yii 新手,正在尝试使用 yii2 的 createCommand(),为此我要创建一个 yii\db\connection 类的新实例,

这是我的控制器中的一个动作,

public function actionDues($student_id){

    $connection = new \yii\db\Connection([
        'dsn' => 'mysql:host=localhost;dbname=db_school',
        'username' => 'root',
        'password' => '',
        'enableSchemaCache' => true,
    ]);
 $sql = 'select * from group_fees where group_id in (select group_id from group_subscriptions where subscriber_id='.$student_id.')';
 $command = $connection->createCommand($sql)->queryAll();

}

我是否认为必须已经加载了一个可以使用的连接实例,而不是像上面那样创建 yii\db\connection 类的新实例?

【问题讨论】:

    标签: php yii2


    【解决方案1】:

    db 连接实例通常由 yii2 在应用程序自举阶段创建,为此您可以在 config/main.php 或 main-local(yii2-advanced 模板)或 config/web.php -> db 中设置相关参数。 php(在yii2基本模板中)

       'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=your_host;dbname=your_dbdame;port=3306',
            'username' => 'root',
            'password' => 'your_pwd',
            'charset' => 'utf8',
            'enableSchemaCache' => true,            
        ],
    

    通过这种配置,您可以通过这种方式使用数据库连接

    $sql = "select a,b, from ..... your sql command';
    
    Yii::$app->db->createCommand($sql)->execute()
    

    【讨论】:

      【解决方案2】:

      自动加载机制不是你想的那样,把它想象成按需或需要时自动加载一个类。

      如果您不使用自动加载,您将在索引文件中包含每个具有类定义的文件。现在考虑像 Yii 这样的框架有大量的类,比如几千个库,现在在索引页面上包含所有这些类文件将花费数千行代码,其中只包含类定义,而且这种行为会使索引脚本变慢。

      自动加载的作用是当您尝试使用完全限定的命名空间来实例化一个类时,它实际上将命名空间中的反斜杠转换为正斜杠,并在该路径中查找该类并将其包含在您的索引文件中。例如,在您的代码中,您使用了\yii\db\Connection,因此自动加载函数将使其变为/yii/db/Connection,并将在/yii/db/Connection 路径中查找类Connection,然后将其包含在您的索引文件中。所以这个动作让脚本运行得更快,不需要写那千行代码。

      您可以阅读有关namespacesautoloading 的更多信息

      【讨论】:

      • 抱歉可能已经在内存中了。可能类似于 Yii::$app->connection()...
      • @ramesh-pareek 我的申请,因为我没有正确回答您的问题。感谢您的支持 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-07
      • 2017-07-25
      • 2023-01-04
      • 1970-01-01
      • 2010-09-12
      • 2019-04-27
      • 2013-04-16
      相关资源
      最近更新 更多