首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

模块 | Models

对于那些想要使用更传统的MVC方法的人来说,模型是可选的

页面内容

  • 楷模
    • 什么是模型?
    • 一个模型的解剖
    • 加载模型
    • 自动加载模型
    • 连接到你的数据库

什么是模型?

模型是PHP类,用于处理数据库中的信息。例如,假设您使用CodeIgniter来管理博客。您可能有一个模型类,它包含插入,更新和检索博客数据的函数。这是一个这样的模型类可能是什么样子的例子:

代码语言:javascript
复制
class Blog_model extends CI_Model {

        public $title;
        public $content;
        public $date;

        public function get_last_ten_entries()
        {
                $query = $this->db->get('entries', 10);
                return $query->result();
        }

        public function insert_entry()
        {
                $this->title    = $_POST['title']; // please read the below note
                $this->content  = $_POST['content'];
                $this->date     = time();

                $this->db->insert('entries', $this);
        }

        public function update_entry()
        {
                $this->title    = $_POST['title'];
                $this->content  = $_POST['content'];
                $this->date     = time();

                $this->db->update('entries', $this, array('id' => $_POST['id']));
        }

}

注意

上例中的方法使用查询生成器数据库方法。

注意

为了简单起见,我们$_POST直接使用这个例子。这通常是不好的做法,更常用的方法是使用输入库$this->input->post('title')

一个模型的解剖

模型类存储在您的应用程序/模型/目录中。如果您需要这种类型的组织,它们可​​以嵌套在子目录中。

模型类的基本原型是这样的:

代码语言:javascript
复制
class Model_name extends CI_Model {

        public function __construct()
        {
                parent::__construct();
                // Your own constructor code
        }

}

其中Model_name是您班级的名称。类名必须带有大写字母的第一个字母,其余的名称必须小写。确保你的类扩展了基类模型类。

文件名必须与类名匹配。例如,如果这是你的类:

代码语言:javascript
复制
class User_model extends CI_Model {

        public function __construct()
        {
                parent::__construct();
                // Your own constructor code
        }

}

你的文件将是这样的:

代码语言:javascript
复制
application/models/User_model.php

加载模型

您的模型通常会从您的控制器方法中加载和调用。要加载模型,您将使用以下方法:

代码语言:javascript
复制
$this->load->model('model_name');

如果您的模型位于子目录中,请包含模型目录中的相对路径。例如,如果您的模型位于application / models / blog / Queries.php中,您将使用以下命令加载模型

代码语言:javascript
复制
$this->load->model('blog/queries');

一旦加载,您将使用与您的类同名的对象访问您的模型方法:

代码语言:javascript
复制
$this->load->model('model_name');

$this->model_name->method();

如果您希望将模型分配给不同的对象名称,则可以通过加载方法的第二个参数指定它:

代码语言:javascript
复制
$this->load->model('model_name', 'foobar');

$this->foobar->method();

这是一个控制器的例子,它加载一个模型,然后提供一个视图:

代码语言:javascript
复制
class Blog_controller extends CI_Controller {

        public function blog()
        {
                $this->load->model('blog');

                $data['query'] = $this->blog->get_last_ten_entries();

                $this->load->view('blog', $data);
        }
}

自动加载模型

如果您发现整个应用程序需要全局特定模型,则可以告诉CodeIgniter在系统初始化期间自动加载它。这是通过打开application / config / autoload.php文件并将模型添加到自动载入数组来完成的。

连接到你的数据库

当一个模型被载入它自动连接到你的数据库。您可以使用以下连接选项:

  • 您可以使用此处描述的标准数据库方法进行连接,无论是从Controller类还是Model类中。
  • 您可以通过第三个参数传递TRUE(布尔值)来告诉模型加载方法自动连接,并使用数据库配置文件中定义的连接设置:$ this-> load-> model('model_name', '',TRUE);
  • 您可以通过第三个参数手动传递数据库连接设置:$ config'hostname'='localhost'; $ config'username'='myusername'; $ config'password'='mypassword'; $ config'database'='mydatabase'; $ config'dbdriver'='mysqli'; $ config'dbprefix'=''; $ config'pconnect'= FALSE; $ config'db_debug'= TRUE; $ this-> load-> model('model_name','',$ config);

扫码关注腾讯云开发者

领取腾讯云代金券