thinkphp5.1对模型的操作,增删查改

用最常见的文章操作来举例

增加文章

  • 增加文章页面
  • 增加文章控制器的操作方法
  • 增加文章模型

在模型中定义模型方法

<?php
namespace app\admin\model;

use think\Model;

class Article extends Model {

    /**
     * @description 发布文章
     * */
    public function createArticle($article){
        $this->save([
            'title'   =>  $article['title'],
            'desc'    =>  $article['desc'],
            'content' =>  $article['content'],
            'status'  =>  $article['status'],
            'create_time' => date("Y-m-d H:i:s")
        ]);
    }
}

在控制器中判断是否有request参数,如果存在参数则存储数据库,否则直接渲染页面

<?php

namespace app\admin\controller;

class Article extends Base {

    /**
     * @description 发布文章控制器
     * @如果获取到数据,则添加到数据库,否则渲染页面
     * */
    public function create(){
        // 获取参数请求参数
        $title = $this->request->post('title');
        $desc = $this->request->post('desc');
        $status = $this->request->post('status');
        $content = $this->request->post('content');

        // 如果存在参数存储数据库
        if($title && $desc && $status && $content){
            $this -> setArticle($title,$desc,$status,$content);
            $res = ['code' => 1 , 'msg' => '发布成功' ];
            return $res;
        }

        return $this -> fetch();
    }

    /**
     * @description 发布文章
     */
    public function setArticle($title,$desc,$status,$content){
        $articleModel = new \app\admin\model\Article;//实例化模型
        //操作模型方法来存储数据库
        $articleModel -> createArticle([
            'title'  => $title,
            'desc'   => $desc,
            'status' => $status,
            'content'=> $content
        ]);
    }

}

页面上点击提交按钮之后请求当前页面的控制器,传入参数获取返回值

$('#submit').click(function(){
    let title = $("input[name='title']").val();
	let desc = $("textarea[name='desc']").val();
	let status = $("input[name='status']:checked").val();
	let content = tinyMCE.activeEditor.getContent();
	let data = { title,desc,status,content };
	$.post(location.href,data,(res)=>{
		if(res.code == 1){
            localtion.href = "{:url('article/index')}";
	    	layer.msg(res.msg);	
		}
	})
})

查询文章

  • 文章列表页面
  • 文章列表控制器的操作方法
  • 文章查询模型

在模型中定义模型方法

主要分为两类:【查询列表(筛选)】和【查询详情】

  • 查询列表通过titlestatus来筛选,如果都未传入则查询所有
  • 查询详情通过id查询
<?php
namespace app\admin\model;

use think\Model;

class Article extends Model {

    /**
     * @description 查询文章列表
     * @param Array $params ['status','title']  
     * status 1[草稿]  2[已发布]  空[都查询]
     * */
    public function getArticle($params=[]){
        if(!(empty($params))){
            if(isset($params['status'])) $res = $this->where('status',$params['status'])->select();
            if(isset($params['title'])) $res = $this->where('title',$params['title'])->select();
        }else{
            $res = $this->select();
        }
        
        return $res;
    }

    /**
     * @description 查询文章详情
     * @param String $id id
     * */
    public function getArticleById($id){
        $article = $this->where('id',$id)->find();

        return $article ;
    }

}

在控制器中获取列表数据并传给页面

<?php

namespace app\admin\controller;

class Article extends Base {

    /**
     * @description 文章列表控制器
     * 根据url参数title或者status来筛选文章列表
     */
    public function index(){
        // 获取文章列表
        $list = $this -> getArticle();
        // 获取筛选条件
        $title = input('title');
        $status = input('status');
        if($title || $status){
            if($status) $params = ['status' => $status];
            if($title) $params = ['title' => $title];
            $list = $this -> getArticle($params);
        }
        
        // 返回给页面数据
        $this -> assign([
            'title' => $title,
            'status' => $status,
            'list' => $list
        ]);

        return $this -> fetch();
    }

    /**
     * @description 查询文章【操作模型方法】
     */
    public function getArticle($params=[]){
        $articleModel = new \app\admin\model\Article;
        $list = $articleModel -> getArticle($params);
        return $list;
    }
}

页面中是通过点击搜索按钮改变href值并将筛选条件携带在url中,控制器通过读取url参数来筛选

 


删除文章

  • 列表页添加一个删除按钮
  • 文章删除模型

删除功能页面操作是:页面列表上有一个删除按钮,通过点击该按钮拿到文章id传给当前页面控制器,在控制器中拿到id执行模型中的删除方法

 在模型中定义模型方法

<?php
namespace app\admin\model;

use think\Model;

class Article extends Model {

    /**
     * @description 删除文章
     * @param String $id id
     * */
    public function delArticl($id){
        $article = $this -> get($id);
        $article -> delete();

        return $article;
    }

}

 在控制器中获取当前id执行模型中的删除方法

<?php

namespace app\admin\controller;

class Article extends Base {

    /**
     * @description 文章列表控制器
     * post请求传入id删除文章
     * 根据url参数title或者status来筛选文章列表
     */
    public function index(){
        // 获取id删除文章
        $id = $this->request->post('id');
        if($id){
            $this -> delArticle($id);
            $res = ['code' => 1 , 'msg' => '删除成功' ];
            return $res;
        }
        // 获取文章列表
        $list = $this -> getArticle();
        // 获取筛选条件
        $title = input('title');
        $status = input('status');
        if($title || $status){
            if($status) $params = ['status' => $status];
            if($title) $params = ['title' => $title];
            $list = $this -> getArticle($params);
        }
        
        // 返回给页面数据
        $this -> assign([
            'title' => $title,
            'status' => $status,
            'list' => $list
        ]);

        return $this -> fetch();
    }

    /**
     * @description 删除文章
     */
    public function delArticle($id){
        $articleModel = new \app\admin\model\Article;
        $articleModel -> delArticl([
            'id'  => $id,
        ]);
    }
}

 页面中点击删除按钮拿到文章id调用ajax请求该控制器,当拿到code为1时代表删除成功,重载页面即可


更新文章

  • 更新文章模型方法
  • 更新文章页面
  • 更新文章控制器的操作方法

具体操作步骤:在列表页对应的文章后面点击“编辑”按钮,打开“编辑页”,先获取当前文章信息,并渲染页面,重新修改之后,点击“保存按钮”完成修改操作

 更新文章的模型方法

<?php
namespace app\admin\model;

use think\Model;

class Article extends Model {

    /**
     * @description 修改文章
     * @param String $id id
     * @param String $title 标题
     * @param String $desc 描述
     * @param String $content 内容
     * @param String $status 状态
     * */
    public function editArticl($id,$title,$desc,$content,$status){
        $article = $this -> get($id);

        if($title && $desc && $content && $status){
            $article->title = $title;
            $article->desc = $desc;
            $article->content = $content;
            $article->status = $status;

            $article->save();
            return $article;
        }
        
    }

    /**
     * @description 查询文章详情
     * @param String $id id
     * */
    public function getArticleById($id){
        $res = $this->where('id',$id)->find();
        return $res;
    }
}

 在文章编辑页面点击保存之后使用ajax将新的文章信息传给当前控制器的操作方法,通过在操作方法中调用模型方法来修改数据库

<?php

namespace app\admin\controller;

class Article extends Base {

    /**
     * @description 编辑文章控制器
     * */
    public function edit($id){
        // 查询文章
        $article = $this -> findArticleById($id);

        // 获取post参数
        $title = $this->request->post('title');
        $desc = $this->request->post('desc');
        $status = $this->request->post('status');
        $content = $this->request->post('content');
        if($title && $desc && $status && $content){
            $this -> updateArticle($id,$title,$desc,$content,$status);
            $res = ['code' => 1 , 'msg' => '修改成功' ];
            return $res;
        }

        $this -> assign([
            'title' => $article['title'],
            'desc' => $article['desc'],
            'status' => $article['status'],
            'content' => $article['content']
        ]);

        return $this -> fetch();
    }


    /**
     * @description 修改文章
     */
    public function updateArticle($id,$title,$desc,$content,$status){
        $articleModel = new \app\admin\model\Article;
        $articleModel -> editArticl($id,$title,$desc,$content,$status);
    }

    /**
     * @description 根据id查询文章
     */
    public function findArticleById($id){
        $articleModel = new \app\admin\model\Article;
        $article = $articleModel -> getArticleById($id);
        return $article;
    }

}

 


个人博客👉:点此进入(http://xueshuai.top)

PHP学习交流群👉:PHP学习交流群

前端学习交流群👉:前端交流群

微信公众号👉:叮当Ding

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端薛小帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值