初识thinkphp(5)

这次主要内容是模型的基本操作

0x01:什么是模型

通过手册的阅览,笼统的说就是,把打开数据库等操作在另一个php文件中进行

以及对变量的规则具体细节,查询,取值等操作进行定义,方便在控制器中直接使用。

0x02:模型的使用

在index目录下创建与controller同级的目录model

创建php模型文件,并调用think\Model文件

<?php
    namespace app\index\model;
    use think\Model;
    class User extends Model{
        protected $table = ‘think_user‘;
        protected function getBirthdayAttr($birthday){
            return date(‘Y-m-d‘, $birthday);
        }
        protected function setBirthdayAttr($value){
            return strtotime($value);
        }
        protected function scopeEmail($query){
            $query->where(‘email‘, ‘[email protected]‘);
        }
    }

?>

table是获取数据库变量,之前在application\database.php文件中已经对打开数据库进行关联了。

getBirthdayAttr函数中命名规则 get + 名称 + Attr

这样能在控制器中直接调用 echo birthday变量 而不用再用date()函数进行转换

setBirthdayAttr函数中命名规则 set + 名称 + Attr

这样在控制器中修改birthday不用调用strtotime()函数,而是直接的user->birthday = ‘xxxx-xx-xx‘

scopeEmail函数中命名规则 scope + 名称

这样在查询的时候不用再写sql语句或者thinkphp自带的sql调用,就可以查询相关联内容

注意:这里的函数中“名称”即使变量名,如果不是变量名,会出现错误。

0x03:在控制器中模型的调用

对于数据库的操作无意就是增删改查

 public function add()
    {
        $user           = new UserModel;
        $user->nickname = ‘sijidou‘;
        $user->email    = ‘[email protected]‘;
        $user->birthday = "1998-10-30"      //strtotime(‘1998-10-30‘);
        if ($user->save()) {
            return 增加成功信息;
        } else {
            return $user->getError();
        }
    }

增加无疑就是new一个模型,注意这里的对象是模型里面的类名,这里因为控制器名字也叫User于是用引用修改了下模型中的User的名字

    use app\index\model\User as UserModel;

这里的birthday实则调用了模型中的setBirthdayAttr函数,如果没有setBirthdayAttr函数,信息可以存储,但在最后输出时候时间固定是1970-01-01的默认值(我这里是这样的)

    public function update($id){
            $user = UserModel::get($id);
            $user->nickname = ‘tudou‘;
            $user->email = ‘[email protected]‘;
            $user->birthday = ‘1999-4-5‘;
            $user->save();
        }

        public function delete($id){
            $user = UserModel::get($id);
            if($user){
                $user->delete();
                return ‘删除用户成功‘;
            }
            else{
                return ‘删除用户不成功‘;
            }
        }
        public function search($email){
            $list = UserModel::scope(‘email‘, $email)->select();
            foreach($list as $user){
                echo $user->nickname . ‘<br/>‘;
                echo $user->email . ‘<br/>‘;
                echo $user->birthday . ‘<br/>‘;
            }
        }

改删查中,改和删都用到的是get,对应的默认调用了getBirthdayAttr函数,而查中的scope则调用的是scopeEmail函数,如果将email变量该为nickname并在模型中添加相应的scopeNickname($nickname)那么可以根据nickname的值进行查询。

0x04:与view之间的交互

这里我使用的官方提供的html模板,源码就不贴了,反正就是个form表格,和一点css。

这里将控制器的内容传到视图里面去,需要用view方法,且对应打开的视图文件名称默认为方法名称

访问的路径为http://192.168.60.132/index/user/create

这里对add()函数进行修改

input函数这里是thinkphp特有的参数,主要功能是用来修改将代码赋值内容改为用接收post传参这里的"post."中的‘.‘主要是用来匹配所有的参数,如果具体到某一个可以"post.nickname"

allowField(true)是thinkphp中特有的函数,功能是用来过滤非数据表中的数据

validate()函数是tinkphp中特有的函数,功能主要是用来校验post过来的数据是否符合规范。

validate的内容在validate的模板中定义(在5.1版本中不可这样定义了,直接在控制器下写个函数就行)

validate模板路径  .\index\validate\User.php

内容为

用rule来给键值对规定

require是必填

min:5是长度最小为5

email是检测是否符合邮箱规范

dateFormat:Y-m-d检测是否符合日期规范(数值不在月份日份以内也不行)

checkMail自定义方法:$value => email参数 $rule => ‘qq.com‘规则,用if语句判断

preg_match是用于正则表达式匹配的比较函数

0x05:关联与输出

手册讲的挺多的,无非就是一对一、一对多、多对多

一对一:在一个中用this->hasOne(另一个模型名),另一个用belongsTo(前一个模型名)

一对多:在一个中用this->hasMany()来定义额外的(),其他与一对一一样

多对多:与一对多差不多,即在每个模型中的belongToMany(对应模型1,对应模型2,。。。)

在add中如果要对关联的模型修改

当前模型->关联模型->关联模型变量 = 内容

保存时候用(这里用的示例函数,作者懒不想测试了,以后用得上再使用)

模型输出

无非就是操作器里面输出或者跳转到视图里面输出

跳转到视图用view(‘视图文件名字‘),一般是在controller同级目录下的view文件里面

不带参数默认与方法名字相同。

在操作器内输出用var_dump也行,return也行

这里还可以用ToArray()来将数组输出,hidden([变量名])来隐藏相应变量输出,visible([变量])来指定有且只有定义的变量输出。

总结:这节内容差不多就这样,之前写的几篇示例我觉得太详细了,以至于像教科书般的流水账,写博文主要还是记笔记,记重点,所以这里比较精简。以及最后的关联相关的内容并没有测试,等到以后实际操作时候再用吧。最近要期末了,又没期末复习,又没写博客,真是太颓废了。

原文地址:https://www.cnblogs.com/sijidou/p/9195986.html

时间: 2024-10-14 10:41:47

初识thinkphp(5)的相关文章

初识ThinkPHP

随时回来更新进度... 工程目录下设定入口文件 index.php: 1 <?php 2 // 检测PHP环境 3 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); 4 // 引入ThinkPHP入口文件 5 require ('./ThinkPHP/ThinkPHP.php'); 6 // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false 7 define('APP_DEB

ThinkPHP学习笔记(一)----初识ThinkPHP

在做微信开发的时候原本使用来yii框架,后续觉得yii虽然功能强大使用方便,但是整个框架太大了,不适合一些轻量级的开发:这个时候发现thinkphp这个框架,框架本身很小,只有几M,但麻雀虽小,但五脏俱全:目前有需要用到的功能think都支持,而且后者也支持自动生成代码,相比yii更灵活,而且这个东东还是国产的,各种api文档都有中文的,这对与楼主这种英语很菜的代码狗来说也算是一种福利. 扯了这么多,直接上一碗代码,让大家尝尝thinkphp的味道喽.... 一.下载基本框架 官网地址:http

初识thinkphp(4)

这次内容是数据库的使用方法 因为在第一章讲过就是拿index这个文件写的数据库的访问,这次实验我使用文件是系统默认的首页 配置的内容也在那里有提过就不重发戳图了. 数据库按照手册上的建议建了3行的内容(使用的SQLyog来进行连接的) 现在想想在配置databas.php这个文件时候有这么一段 当时想着这个有什么意义,我想这样大概能分模块引用数据库,不至于使得结构混乱 要访问数据库,要加上 use think\Db 接下来显示进行增删改查 <?php namespace app\index\co

ThinkPHP框架快速开发网站

使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站,基本功能算是完成了.比较有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.如果对于同样是Web方面新手的你有一丝丝帮助,那就更好了挖. 以前用PHP做过一个很蹩脚的网站,为什么这么说呢,因为写的全是死代码.做完以后觉得实在是累,前端要div+css,js 后端要php,mysql,这么多东西要弄,十分头疼.所以,在接到做网站的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟以前一样那么累了. 我选择的是PHP

使用ThinkPHP框架高速开发站点(多图)

使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助,那就更好了挖. 曾经用PHP做过一个非常蹩脚的站点,为什么这么说呢,由于写的全是死代码.做完以后认为实在是累,前端要div+css,js 后端要php,mysql,这么多东西要弄,十分头疼.所以,在接到做站点的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟曾经一样那么累了. 我选择的是PH

使用ThinkPHP框架高速发展网站(多图)

使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助,那就更好了挖. 曾经用PHP做过一个非常蹩脚的站点,为什么这么说呢,由于写的全是死代码.做完以后认为实在是累,前端要div+css,js 后端要php,mysql,这么多东西要弄,十分头疼.所以,在接到做站点的任务后,我第一时间想到一定要使用开发框架去做,绝不能跟曾经一样那么累了. 我选择的是PH

ThinkPHP之初识

ThinkPHP 轻量级框架,国人框架,入门容易 thinkphp 3.2版本 'URL_CASE_INSENSITIVE'  =>  true,   // 默认false 表示URL区分大小写 true则表示不区分大小写,这句有BUG 解压tp打开可以看到下图: 其中ThinkPHP是核心,index.php是入口文件 点开ThinkPHP如下图: 点开Conf可以看到下图: convention.php是核心配置文件,基本上所有的配置都在其中. library是核心资源库,library中的

thinkPHP框架之初识篇

安装框架 XAMPP:XML.Apache.MySQL.PHP.PERL LAMP : Linux.Apache.MySQL.PHP LNMP :Linux.Ningx.MySQL.PHP J2EE : 贵 linux命令 1.关闭系统自带apache sudo /usr/sbin/apachectl stop 2.查看Apache系统进程 ps -ef | grep httpd 3.查看MySQL进程 ps -ef | grep mysql 4.查看PHP版本 php -version 5.显

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的