我是CodeIgniter的新手,目前在我的项目中,我有几个模型,由几个控制器加载,需要与数据库一起工作。
我的问题是-我可以在整个项目的一个地方调用$this->load->database()
,或者我应该在我的模型中的每个方法中调用它吗?
谢谢
在您的autoload.php
位于/application/config/autoload.php
中,您看到$autoload['libraries']
数组只添加
$autoload['libraries'] = array('session', 'database','other_libraries');
如果你的项目范围涉及数据库交互,你应该使用autoload
,而包括在每个功能将是一个头痛的你
你有三个选择(我能想到的)。
-
如果您在项目中几乎所有地方都需要它,请使用
/application/config/autoload.php
文件,您将在其中找到以下声明:$autoload['libraries'] = array();
可以改成
$autoload['libraries'] = array('database');
这是最简单的方法,但它确实增加了开销,因为即使您不需要它,也会加载数据库类。
-
如果您发现您需要在特定模型中对几乎所有方法使用它,您可以在该特定模型的构造函数中调用
$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 } }
,它将使数据库类对该模型中的每个方法可用。这是一个比第二种更有效的选择,而且不像第三种那么乏味,可能使其成为最平衡的选择。
-
当然,你也可以选择在每个需要它的方法中使用
$this->load->database();
来加载它,这样增加的开销最少,理论上是最有效的。然而,这样做是非常繁琐的。
这三种方法都有效,你可以选择是简单还是高效。(我个人推荐选择2)
如果只有部分页面需要数据库连接,您可以通过添加这行代码来手动连接到数据库
$this->load->database();
在任何需要的函数中,或者在你的类构造函数中,使数据库在该类中全局可用。
"auto connect"特性将加载并实例化每个页面的数据库类将单词'database'添加到库数组中,如下面的文件所示:
http://ellislab.com/codeigniter/user-guide/database/connecting.html应用程序/配置/autoload.php
我知道这不是所有方法中最好的,但是既然你是初学者…你只需调用加载数据库$this->load->database()
在方法上面的代码,你的数据库相关的查询开始。只是假设$this ->load->database();
是完全相同的事情,因为你是使用include_once('connection.php')
这个脚本在你简单的php脚本(没有CI)。