初识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', '4396@qq.com');
}
} ?>
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 = 'sijidou@qq.com';
$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 = '4396@qq.com';
$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([变量])来指定有且只有定义的变量输出。
总结:这节内容差不多就这样,之前写的几篇示例我觉得太详细了,以至于像教科书般的流水账,写博文主要还是记笔记,记重点,所以这里比较精简。以及最后的关联相关的内容并没有测试,等到以后实际操作时候再用吧。最近要期末了,又没期末复习,又没写博客,真是太颓废了。
初识thinkphp(5)的更多相关文章
- 初识thinkphp(3)
这篇内容主要涉及请求相应内容. 该系列主要是个人笔记,且内容是连贯的,其中涉及到的自己写的模块或者方法在前面文章中有介绍咋来的,如果您看得云里雾里,给您带来不便,真的不好意思. 0x01:请求对象 官 ...
- 初识thinkphp(4)
这次内容是数据库的使用方法 因为在第一章讲过就是拿index这个文件写的数据库的访问,这次实验我使用文件是系统默认的首页 配置的内容也在那里有提过就不重发戳图了. 数据库按照手册上的建议建了3行的内容 ...
- 初识thinkphp(2)
thinkphp的url路径的表示格式为 http://ip/tp/public/index.php/模块/控制器/操作 这里url最后的操作就是类里面的函数. 0x01:url访问格式 官方文档中有 ...
- 初识thinkphp(1)
作为一名准备成为CTF里WEB狗的萌新,在做了3个月的CTF的web题后,发现自己php代码审计非常不过关,并且web的架构模式条理也十分的不清晰,于是抱着提高代码审计能力的态度在近期会去写一个简单的 ...
- ThinkPHP学习笔记(一)----初识ThinkPHP
在做微信开发的时候原本使用来yii框架,后续觉得yii虽然功能强大使用方便,但是整个框架太大了,不适合一些轻量级的开发:这个时候发现thinkphp这个框架,框架本身很小,只有几M,但麻雀虽小,但五脏 ...
- 使用ThinkPHP框架高速开发站点(多图)
使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...
- 使用ThinkPHP框架高速发展网站(多图)
使用ThinkPHP框架高速搭建站点 这一周一直忙于做实验室的站点,基本功能算是完毕了.比較有收获的是大概了解了ThinkPHP框架.写一些东西留作纪念吧.假设对于相同是Web方面新手的你有一丝丝帮助 ...
- ThinkPHP Widget模块开发流程
初识ThinkPHP的Widget,现把模块开发的流程发布如下,也方便以后自己查阅: 一.新建数据库表self_modules,sql代码如下 CREATE TABLE `self_modules` ...
- [转]使用ThinkPHP框架快速开发网站(多图)
本文转自:http://blog.csdn.net/ruby97/article/details/7574851 这一周一直忙于做实验室的网站,基本功能算是完成了.比较有收获的是大概了解了ThinkP ...
随机推荐
- Redis常用命令速查 <第二篇>
一.Key Key命令速查: 命令 说明 DEL 删除给定的一个或多个 key,不存在的 key 会被忽略,返回值:被删除 key 的数量 DUMP 序列化给定 key,返回被序列化的值,使用 RES ...
- 借读:分布式锁和双写Redis
本帖最后由 howtodown 于 2016-10-3 16:01 编辑问题导读1.为什么会产生分布式锁?2.使用分布式锁的方法有哪些?3.本文创造的分布式锁的双写Redis框架都包含哪些内容? ...
- kubernetes配置secret拉取私仓镜像
2017.05.10 19:48* 字数 390 阅读 5216评论 0喜欢 8 对于公司内部的项目, 我们不可能使用公有开放的镜像仓库, 一般情况可能会花钱买docker私仓服务, 或者说自己在服务 ...
- transform 属性之 transform-origin与顺序问题
transform属性之 transform-origin 针对transform中的几种值的先后顺序 transform值的先后顺序: 注意: 当我们在旋转后再进行位移的时候,其实是按照旋转后的坐标 ...
- git 查看一个分支是否被合并过
1.查看该分支的提交历史 git log 分支名 2.git log master |grep comitid 如果包含,就证明已经合并过 3.git branch -d 分支名,如果报错,就是没合并 ...
- MYSQL查询重复记录的方法
select * from hengtu_demandpush a where (a.did,a.mid) in (select did,mid from hengtu_demandpush grou ...
- 2016-2017-2 20155309 南皓芯java第六周学习总结
教材内容详解 这一次主要学习的是第十章与第十一章的内容.主要讲述了串流,字符处理和线程以及并行API. 输入输出 串流:Java中的数据有来源(source)和目的地(destination),衔接两 ...
- javascritpt创建对象
javascript添加对象示例: <script> person=new Object(); person.firstname="Bill"; person.last ...
- Anaconda+django写出第一个web app(六)
今天学习如何写一个注册用户的界面. 上一节的导航栏中我们修改了导航栏右侧的文字为register并将路径设置为/register,内容如下: <li><a href="/r ...
- 【ARTS】01_06_左耳听风-20181217~1223
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...