设为首页 收藏本站
查看: 710|回复: 0

[经验分享] [PHP]CodeIgniter学习手册(三):模型Model的介绍与简单案例

[复制链接]

尚未签到

发表于 2017-4-14 06:19:51 | 显示全部楼层 |阅读模式
什么是模型?

  模型是专门用来和数据库打交道的PHP类。例如,假设你想用CodeIgniter来做一个Blog。你可以写一个模型类,里面包含插入、更新、删除Blog数据的方法。
  下面的例子将向你展示一个普通的模型类:


<?
class Blogmodel extends CI_Model {
var $title   = '';
var $content = '';
var $date    = '';
function __construct()
{
parent::__construct();
}
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
function insert_entry()
{
$this->title   = $_POST['title']; // 请阅读下方的备注
$this->content = $_POST['content'];
$this->date    = time();
$this->db->insert('entries', $this);
}
function update_entry()
{
$this->title   = $_POST['title'];
$this->content = $_POST['content'];
$this->date    = time();
$this->db->update('entries', $this, array('id' => $_POST['id']));
}
}
?>


注意: 上面用到的函数是 Active Record 数据库函数.

  备注: 为了简单一点,我们直接使用了$_POST。
  不过,这不太好,平时我们应该使用输类:

$this->input->post('title');



剖析模型


模型类文件存放在 application/models/ 文件夹。 如果你愿意,可以在里面建立子文件夹。

最基本的模型类必须像这样:
class Model_name extends CI_Model {
function __construct()
{
parent::__construct();
}
}

  Model_name 是模型类的名字。 类名的首字母必须大写,其他字母小写并且确保你的类继承了基本模型类(Base Model Class)。



文件名应该是模型类名的小写版。比如,如果你的类是:
class User_model extends CI_Model {
function __construct()
{
parent::__construct();
}
}
类的文件名应该是:
  application/models/user_model.php
  


载入模型

模型可以在 控制器 中被引用。 就像这样:

$this->load->model('Model_name');

如果模型文件在子文件夹下,引用的时候要带上相对路径名。例如:如果你有一个模型 application/models/blog/queries.php。 下面的代码可以引用它:
$this->load->model('blog/queries');

模型一旦被载入,你就能通过下面的方法使用它:
$this->load->model('Model_name');
$this->Model_name->function();

在默认的情况下模型名称就直接被引入作为对象名,就如上面所示。当然,如果你愿意,可以起个更好记的对象名!那么,可以在加载模型函数中指定第二个参数来设定,例如:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();

这里有个控制器的例子,加载一个模型,然后通过视图显示出来
class Blog_controller extends CI_Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}

自动载入模型

如果您需要一个在整个项目中都起作用的特定模型,您可以让 CodeIgniter 在初始化时自动装载它。实现的方法是打开 application/config/autoload.php 文件,然后在自动装载数组中添加上这个模型。
  备注: 经过测试(以加载一个模型为例)自动加载模型和手动载入模型时,消耗的内存情况是一样的
  但是当加载模型越多消耗内存就会越大。自动加载模型是要牺牲内存消耗换取的,所以尽量不要自动加载不必要贯穿全站项目的模型!
  


连接到数据库


当一个模型被载入时,它并不会自动连接数据库。以下方法可以使您连接数据库:

您可以使用标准方法来连接数据库(说明), 也可以通过控制器或者您的自定义模型。

您可以把第三个参数设置为TRUE来使模型装载函数自动连接数据库,连接配置可以在您的数据库配置文件中可以定义:
    $this->load->model('Model_name', '', TRUE);

  您可以手动设定第三个参数来载入您的自定义数据库配置:

  

$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);

  下面是我在SAE中连接数据库使用的Model,封装了一些常用到的方法,比如Select,Insert等等。
  

<?
class sae_sql_model extends CI_Model {
var $mysql;
var $sql;
function __construct()
{
parent::__construct();
$this->mysql = new SaeMysql();
}
/*MySQL的Select查询函数,函数的参数依次为:
*1.表名-2.列名-3.开始的行数-4.查询的函数
*/
function select_limit($table_name,$row_name,$start_row,$row_count)
{
$this->sql = "SELECT ".$row_name." FROM `".$table_name."` LIMIT ".$start_row.",".$row_count."";
$data = $this->mysql->getData($this->sql);
return $data;
}
/*MySQL的Select查询函数,函数的参数依次为:
*1.表名-2.列名-3.查询的列名-4.查询的目标
*/
function select_where($table_name,$row_name,$where_row,$target_row)
{
$this->sql = "SELECT ".$row_name." FROM `".$table_name."` WHERE `".$where_row."`="
.$target_row;
$data = $this->mysql->getData($this->sql);
return $data;
}
/*MySQL的Insert插入函数,函数的参数依次为:
*1.表名-2.插入数据的关联数组
*/
function insert_into($table_name,$array_data)
{
//$tempKey和$tempValue两个数组临时存储插入的数据
$temp_key_string = "";
$temp_value_string = "";
//遍历取出关联数组中的数据并将其存储在字符串中
foreach($array_data as $key=>$value)
{
$temp_key_string .= "`".$key."`,";
$temp_value_string .= "'".$value."',";
}
//除去末尾的逗号
$temp_key_string = substr($temp_key_string,0,-1);
$temp_value_string = substr($temp_value_string,0,-1);
//组装Insert的SQL语句
$this->sql = "INSERT INTO `".$table_name."` (".$temp_key_string.") VALUES (".$temp_value_string.");";
//运行Insert的SQL语句
$this->mysql->run_sql($this->sql);
}

//测试输出的函数
function select_output($array_data,$row_name)
{
foreach($array_data as $key=>$value)
{
echo $value[$row_name];
}
}
}
?>

  下面是几个简单的调用的例子:

//连接数据库并返回查询结果
$sqlData = $this->sql_model->select_limit('Entries','*',0,10);
//将数据库的结果传入data中
$data['query']=$sqlData;
//使用变量$data向目标网页传入数据
$this->load->view('blog_view',$data);

Insert函数的调用例子:
//将要插入的数据存入关联数组中
$data_array['entry_id'] = $_POST['entry_id'];
$data_array['body'] = $_POST['body'];
$data_array['author'] = $_POST['author'];
//执行SQL语句
$sqlData = $this->sql_model->insert_into('Comments',$data_array);






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364610-1-1.html 上篇帖子: 补上一篇 EXT Tree 中遗漏的get-node.php代码 下篇帖子: 最佳PHP,HTML5和CSS框架大荟萃之二 HTML5框架
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表