zoukankan      html  css  js  c++  java
  • thinkphp5项目--企业单车网站(三)

    thinkphp5项目--企业单车网站(三)

    项目地址

    fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Website
    https://github.com/fry404006308/BicycleEnterpriseWebsite

    一、动态查询

    thinkphp支持动态查询,这就很方便了,可以根据自己功能或者用户查询自由查找

    所以thinkphp功能应该很全,很多时候我可能需要多去找,有很多我不知道的功能

    还有很多操作需要自己多用多敲才能会,不管多么复杂和难的,敲着敲着就特别简单了

    动态查询
    
    支持动态查询方法,例如:
    // 根据name字段查询用户
    $user = User::getByName('thinkphp');
    // 根据email字段查询用户
    $user = User::getByEmail('thinkphp@qq.com');
    1 动态调用:
    2 
    3 $user = new User;
    4 $user->count();
    5 $user->where('status','>',0)->count();
    6 $user->where('status',1)->avg('score');
    7 $user->max('score');

    二、模型的两种使用方法

    以查询为例:

    1、直接在控制器中调用模型对象或者模型的静态方法查找数据库数据

    2、在模型中通过方法查找好数据,然后在控制器中调用

    1、直接在控制器中调用模型对象或者模型的静态方法查找数据库数据

     1 <?php
     2 namespace appadmincontroller;
     3 use thinkController;
     4 use appadminmodelAdmin as ModelAdmin;
     5 
     6 class Admin extends Controller
     7 {
     8     // //初始胡方法
     9     // public function _initialize(){
    10     //     $modelAdmin= new ModelAdmin();
    11     // }
    12 
    13     //列表页
    14     public function lst()
    15     {
    16         $data=ModelAdmin::select();
    17         dump($data);die;
    18         return view('list');
    19     }

    2、在模型中通过方法查找好数据,然后在控制器中调用

    模型

    1     public function getAdmin(){
    2         return $this->select();
    3     } 

    控制器

    1     public function lst()
    2     {
    3         $modelAdmin= new ModelAdmin();
    4         $data=$modelAdmin->getAdmin();
    5         dump($data);die;
    6         return view('list');
    7     }

    注意调用方法是->,老是写成java中的.(点)

    三、增删改查的业务逻辑

    (1)、增加

       1、在控制器中获取页面表单数据然后传到数据库

     1 //增加页
     2 public function add()
     3 {
     4     if(request()->isPost()){
     5         //获取post提交的数据
     6         $data=input('post.');
     7         //模型处理获取的数据
     8         $modelAdmin= new ModelAdmin();
     9         //结果
    10         $res=$modelAdmin->addAdmin($data);
    11         
    12         // $res=db('admin')->insert($data);
    13         if($res){
    14             $this->success('添加管理员成功!!',url('admin/lst'));
    15         }else{
    16             $this->error('添加管理员失败!!');
    17         }
    18         return;
    19     }
    20     return view();
    21 }

    (2)、删除

       1、在页面通过链接将用户id传给控制器  

    1 <a href="#" onClick="warning('确实要删除吗', '{:url('admin/delete',array('id'=>$vo['id']))}')" class="btn btn-danger btn-sm shiny">
    2     <i class="fa fa-trash-o"></i> 删除
    3 </a>

       2、在控制中处理然后在数据库中删除这个特定id的用户

     1 //删除页
     2 public function delete(){
     3     //获取从页面传入的管理员id
     4     $data=input('id');
     5     //模型处理获取的数据
     6     $modelAdmin= new ModelAdmin();
     7     $res=$modelAdmin->deleteAdmin($data);
     8     if($res){
     9         $this->success('删除管理员成功!!',url('admin/lst'));
    10     }else{
    11         $this->error('删除管理员失败!!');
    12     }
    13 }

    (3)、修改

      修改操作好像是删除操作和增加操作的一个综合体,步骤比较像删除操作+增加操作

      1、在页面通过链接将用户id传给控制器  

    1 <a href="{:url('admin/edit',array('id'=>$vo['id']))}" class="btn btn-primary btn-sm shiny">
    2     <i class="fa fa-edit"></i> 编辑
    3 </a>

      2、在数据库中查询数据显示到修改页面

    1 /**part2**/
    2 //获取界面传过来的id
    3 $id=input('id');
    4 //根据id查询数据
    5 $modelAdmin= new ModelAdmin();
    6 $data=$modelAdmin->findAdmin($id);
    7 // dump($data);die;
    8 //将数据传递到修改界面
    9 $this->assign('data',$data);

      3、在控制器中获取页面修改好的表单数据然后传到数据库

     1         /**part3**/
     2         //判断是否为用户post提交
     3         if(request()->isPost()){
     4             $data1=input('post.');
     5             // dump($data1);die;
     6             // 将修改好的数据传入到数据库
     7             $res=$modelAdmin->editAdmin($data1);
     8             if($res){
     9                 $this->success('修改管理员成功!!',url('admin/lst'));
    10             }else{
    11                 $this->error('修改管理员失败!!');
    12             }
    13         }

    (4)、查询

      1、从数据库中查询数据然后分配给页面

    1 //列表页
    2 public function lst()
    3 {
    4     // $data=ModelAdmin::select();
    5     $modelAdmin= new ModelAdmin();
    6     $data=$modelAdmin->getAdmin();
    7     $this->assign('data',$data);
    8     return view('list');
    9 }

    三、thinkphp中引用自己的bootstrap分页样式

    1、新增分页php页面,修改分页代码

    2、修改配置文件

    文件名字改的话就是该'type'=>'bootstrap',,如果你重写的样式是aaa.php,这里就弄成'type'=>'aaa',就好

    四、部分字段更新

    在更新数据的时候我们可能需要部分字段更新,比如密码为空表示不修改的情况

    1 //密码字段为空说明不修改密码
    2 return $this->allowField(['username'])->save($data,['id']);

    上面的代码是在模型中,表示只允许修改username字段,并且是根据id来修改

    1、传数组进去修改的方法很棒

    2、thinkphp模型中的方法和数据库中的方式有些是互通的

    3、allowField用于部分字段更新

    4、用save的时候直接返回成功或者失败的条数(0,1等),用update的时候就是一堆其它的

    5、allowField只对save有效,对update无效

    五、没必要所有的数据库操作都通过模型

    没必要所有的数据库操作都通过模型,有些很简单不用处理数据的就直接在控制器就好

    比较一下下面两种根据id查找管理员信息的方法

    1、直接控制器中:

    $data=db('admin')->find($id);

    2、通过模型:

    在控制中代码

    1 /**part2**/
    2 //获取界面传过来的id
    3 $id=input('id');
    4 //根据id查询数据
    5 $modelAdmin= new ModelAdmin();
    6 $data=$modelAdmin->findAdmin($id);
    7 // dump($data);die;
    8 //将数据传递到修改界面
    9 $this->assign('data',$data);

    模型中代码

     1     /**
     2      * 根据管理员id查找数据
     3      * @param  [type] $id [description]
     4      * @return [type]     [description]
     5      */
     6     public function findAdmin($id){
     7         $data=$this->find($id);
     8         // dump($data);die;
     9         return $data;
    10     }

    一个通过助手函数一行代码,一个19行代码还容易错,不用太规矩,怎么简单怎么来,怎么方便自己,方便大家怎么来。

    六、field关键词取部分数据

    比如当我们表单不需要显示密码的时候,我们可以不取密码,当然也可以取了不显示

    $date=db('admin')->field('id,username')->find($id);

    比如文章表里面,用不到的时候可以指定不用取文章,不然浪费服务器性能太大了

    七、关于注释

    不是所有的方法都需要写注释,有一些非常非常非常见名知意的方法就不用写啊,比如add,delete,edit,,或者说不用写那么详细

    因为注释的作用是方便你,方便大家,怎么简单方便怎么来

    关于算法步骤,这个一定要写,这个写了之后思路特别清晰,效率非常高

  • 相关阅读:
    redis 定义序列号
    mac下搭建phalcon扩展以及phalcon-devtools扩展
    rabbitmq集群架构(转载)
    mysql下limit分页优化思路
    ffmpeg图片格式转换,webp转换成jpg,webp转换成png,jpg转换成png,jpg转换成webp,png转换成webp,png转换成jpg
    sed替换多个字符串在一条命令里面
    CentOS7减轻DDOS攻击,使用fail2ban预防CC攻击
    ffmpeg改变jpg,png,webp图片大小
    wget下载github的releases的软件
    CentOS6.5设置IPTables防火墙
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/8849835.html
Copyright © 2011-2022 走看看