思考:如果我们需要跟模型打交道,其底层是和数据库打交道.如何配置数据库信息?

数据库配置

image.png
具体的配置项参考TP惯例配置文件

定义模型

思考:

  1. 模型写在哪里?

image.png

  1. 模型的文件的名称如何命名?

需要定义模型的文件的名称,必须和表名一致.
例如我们数据表里面的名称有如下两张表
数据库里面的表:sh_goods 商品表
模型名称:GoodsModel.class.php(去除表前缀.Model.class.php(固定写法))
数据库里面的表:sh_goods_attribute 商品属性值表
模型名称:GoodsAttibuteModel.class.php(去除表前缀剩下的部分全部使用大驼峰的方式.Model.class.php(固定写法))
image.png

  1. 模型的里面内容如何编写?(继承、方法的定义)

image.png

  1. 控制器里面如何实例化模型?

效果:
image.png
image.png
效果:
image.png

  1. 控制器里面如何将模型获取数据赋值给视图

image.png

  1. 视图里面如何展示数据

注意: 在很多产品里面都没有使用所谓标签语法
image.png

实例化模型

方法四:
通过在控制器里面引入模型类文件,然后使用new进行实例化我们可以获取模型实例.
image.png
方法二:
我们可以在控制器里面通过系统提供的一个D函数,直接实例化模型,得到实例
主要是D函数M函数

模型的curd,acid

增删改查, 数据库性质

查询数据

如果我们需要在模型里面查询数据,可以使用系统模型提供的select方法获取表中所有的数据信息。(二维数组)

  1. public function getDataAction(){
  2. $goodsModel =D("Goods");
  3. $goodData= $goodsModel->select();
  4. $count= $goodsModel->count();//获得表中总记录
  5. $this->assign('goodsData',$goodData);
  6. $this->display();
  7. }
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <ul>
  11. <?php foreach($goodsData as $k=>$v):?>
  12. <li>序号<?php echo $v['goods_id'];?></li>
  13. <li>名称<?php echo $v['goods_name'];?></li>
  14. <hr>
  15. </ul>
  16. <?php endforeach ?>
  17. <hr>
  18. <volist name="goodsData" id="data">
  19. {$data:goods_id}:{$data.goods_name} <br>
  20. </volist>
  21. </body>
  22. </html>

增加数据

系统逻辑,add 方法

  1. public function addDataAction(){
  2. $goodsModel=D('Goods');
  3. $insertData = array(
  4. 'goods_name'=>'新的数据',
  5. 'goods_price'=>'1231.12',
  6. 'goods_number'=>1231,
  7. 'goods_sn'=>uniqid(),
  8. );
  9. //参数是一个关联数组,并且数组的下标是表中的字段名称,并且主键ID可以省略
  10. $res=$goodsModel->add($insertData);//可以插入数据库
  11. if ($res>0){
  12. //成功,跳转到崭新页面
  13. //success 是基类的Cotroller中的方法
  14. $this->success('添加成功',U('getDdata'),10);
  15. }else{
  16. $this->error('添加失败',U('getDdata'),10);// 如果不指定第二个参数,就是往上一页跳转
  17. die('error');
  18. }
  19. }

成功插入数据后,返回的是主键ID,应该是跳转到展示页面

image.png
效果
image.png

改数据

明白:

  1. 修改条件
  2. 修改数据
    1. public function updataAction(){
    2. $goodsModel = D('Goods');
    3. $goodsId=21;
    4. $updataData= array(
    5. 'goods_id'=>$goodsId,
    6. 'goods_name'=>'new data',
    7. 'goods_price'=>2000,
    8. 'goods_number'=>12312312,
    9. 'goods_sn'=> uniqid(),
    10. );
    11. //返回值是收影响的参数
    12. $res = $goodsModel->save($updataData);
    13. dump($res);
    14. }
    底层代码:
    image.png

    删除数据

    1. public function delAction(){
    2. //主键删除
    3. $goodsId=21;
    4. $goodsModel=D('goods');
    5. $res = $goodsModel->delete($goodsId);
    6. dump($res);
    7. }
    1. public function delAction(){
    2. //主键删除
    3. $goodsId=21;
    4. $ids="19,20";
    5. $goodsModel=D('goods');
    6. //受影响的行数
    7. $res = $goodsModel->delete($ids);
    8. dump($res);
    9. }
    image.png
    deltete根据主键之外的字段做删除
    1. public function delsAction(){
    2. //根据除开主键之外的字段做删除
    3. $options=array(
    4. // 'where'=>array('goods_name'=>'shou1'),
    5. // 'where'=>array('goods_price'=>12)
    6. 'where'=>array(8,9,10));
    7. $goodsModel = D('Goods');
    8. $res = $goodsModel->delete($options);
    9. dump($res);
    10. }