CodeIgniter -我应该在何时何地调用$this->load->database()


CodeIgniter - where and when should I call $this->load->database()

我是CodeIgniter的新手,目前在我的项目中,我有几个模型,由几个控制器加载,需要与数据库一起工作。

我的问题是-我可以在整个项目的一个地方调用$this->load->database(),或者我应该在我的模型中的每个方法中调用它吗?

谢谢

在您的autoload.php位于/application/config/autoload.php中,您看到$autoload['libraries']数组只添加

$autoload['libraries'] = array('session', 'database','other_libraries');

如果你的项目范围涉及数据库交互,你应该使用autoload,而包括在每个功能将是一个头痛的你

你有三个选择(我能想到的)。

  1. 如果您在项目中几乎所有地方都需要它,请使用/application/config/autoload.php文件,您将在其中找到以下声明:

    $autoload['libraries'] = array();
    

    可以改成

    $autoload['libraries'] = array('database');
    

    这是最简单的方法,但它确实增加了开销,因为即使您不需要它,也会加载数据库类。

  2. 如果您发现您需要在特定模型中对几乎所有方法使用它,您可以在该特定模型的构造函数中调用$this->load->database();,例如:

    class Forums_model extends CI_Model{
       function __construct()
       {
           // Call the parent constructor
           parent::__construct();
           $this->load->database();
       }
       function get_records()
       {
           $this->db->get('table'); 
           //this now works in every method in this model
       }
    }
    

    ,它将使数据库类对该模型中的每个方法可用。这是一个比第二种更有效的选择,而且不像第三种那么乏味,可能使其成为最平衡的选择。

  3. 当然,你也可以选择在每个需要它的方法中使用$this->load->database();来加载它,这样增加的开销最少,理论上是最有效的。然而,这样做是非常繁琐的。

这三种方法都有效,你可以选择是简单还是高效。(我个人推荐选择2)

如果只有部分页面需要数据库连接,您可以通过添加这行代码来手动连接到数据库

 $this->load->database(); 

在任何需要的函数中,或者在你的类构造函数中,使数据库在该类中全局可用。

"auto connect"特性将加载并实例化每个页面的数据库类将单词'database'添加到库数组中,如下面的文件所示:

应用程序/配置/autoload.php

http://ellislab.com/codeigniter/user-guide/database/connecting.html

我知道这不是所有方法中最好的,但是既然你是初学者…你只需调用加载数据库$this->load->database()在方法上面的代码,你的数据库相关的查询开始。只是假设$this ->load->database();是完全相同的事情,因为你是使用include_once('connection.php')这个脚本在你简单的php脚本(没有CI)。