一、查询

  D方法实例化模型类的时候通常是实例化某个具体的模型类,如果你仅仅是对数据表进行基本的CURD操作的话,使用M方法实例化的话,由于不需要加载具体的模型类,所以性能会更高。

$map = array();
$map['u.store_id'] = array('eq',0);
$map['u.reg_time'] = array('egt',time());
$map['u.user_rank'] = array('in',array(0,9)); $group = '';
$order = '';
//查询10-20的数据集
$list = M('users u')->field('u.user_id,u.user_name,u.store_id')
->join('LEFT JOIN __ORDER_INFO__ oi ON oi.user_id=u.user_id')
->where($map)
->limit(10,20)
->group($group)
->order($order)
->select(); //读取数据表中的一行数据(或者关联数据),主要通过find方法完成
//如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。
$data = M('users')->where('status=1 AND name="thinkphp"')->find(); //读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。
//默认情况下,当只有一个字段的时候,返回满足条件的数据表中的该字段的第一行的值。
$nickname = M("User")->where('id=3')->getField('nickname');
//如果需要返回整个列的数据,可以用:
$nickname = M("User")->getField('id',true);
//如果传入多个字段的话,默认返回一个关联数组:
$list = M("User")->getField('id,nickname'); //获取用户数:
$userCount = M("User")->count(); //原生sql查询
$Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
$Model->query("select * from think_user where status=1"); //打印SQL
echo M()->_sql();

二、更新

$data = array();
$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
M("User")->where('id=5')->save($data); // 根据条件更新记录 //原生sql执行修改、删除
$Model = new \Think\Model() // 实例化一个model对象 没有对应任何数据表
$Model->execute("update think_user set name='thinkPHP' where status=1");

三、删除

M("User")->where('id=5')->delete(); // 删除id为5的用户数据

四、插入

$data['name'] = 'ThinkPHP';
$data['email'] = 'ThinkPHP@gmail.com';
M("User")->add($data); // 批量添加数据
$dataList[] = array('name'=>'thinkphp','email'=>'thinkphp@gamil.com');
$dataList[] = array('name'=>'onethink','email'=>'onethink@gamil.com');
$User->addAll($dataList);

五、接受参数、跳转、重定向、判断请求类型、ajax返回、显示页面

//判断请求类型
IS_GET IS_POST IS_AJAX //接受参数 I方法是ThinkPHP用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:
//I('变量类型.变量名/修饰符',['默认值'],['过滤方法或正则'],['额外数据源'])
I('post.name','','htmlspecialchars'); // 采用htmlspecialchars方法对$_POST['name'] 进行过滤,如果不存在则返回空字符串 //跳转、重定向
//系统的\Think\Controller类内置了两个跳转方法success和error,用于页面跳转提示,而且可以支持ajax提交。
//success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒),例如:
// 操作完成3秒后跳转到 /Article/index
$this->success('操作完成','/Article/index',3);
// 操作失败5秒后跳转到 /Article/error
$this->error('操作失败','/Article/error',5); //Controller类的redirect方法可以实现页面的重定向功能。
//redirect方法的参数用法和U函数的用法一致(参考URL生成部分),例如:
//重定向到New模块的Category操作
$this->redirect('New/category', array('cate_id' => 2), 5, '页面跳转中...');
//上面的用法是停留5秒后跳转到New模块的category操作,并且显示页面跳转中字样,重定向后会改变当前的URL地址。
//如果你仅仅是想重定向要一个指定的URL地址,而不是到某个模块的操作方法,可以直接使用redirect函数重定向,例如:
//重定向到指定的URL地址
$this->redirect('/New/category/cate_id/2', 5, '页面跳转中...'); //ajax返回
//ThinkPHP可以很好的支持AJAX请求,系统的\Think\Controller类提供了ajaxReturn方法用于AJAX调用后返回数据给客户端。并且支持JSON、JSONP、XML和EVAL四种方式给客户端接受数据,并且支持配置其他方式的数据格式返回。ajaxReturn方法调用示例:
$data['status'] = 1;
$data['content'] = 'content';
$this->ajaxReturn($data,'json'); //显示页面
$this->display();
//或
$this->display('模板地址');

六、模板标签

1、Volist

//volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行输出。 在控制器中首先对模版赋值:
$list = M('User')->limit(10)->select();
$this->assign('list',$list); //在模版定义如下,循环输出用户的编号和姓名:
<volist name="list" id="vo">
{$vo.id}:{$vo.name}<br/>
</volist> //支持输出查询结果中的部分数据,例如输出其中的第5~15条记录
<volist name="list" id="vo" offset="5" length='10'>
{$vo.name}
</volist> //输出循环变量
<volist name="list" id="vo" key="k" >
{$k}.{$vo.name}
</volist> //如果没有指定key属性的话,默认使用循环变量i,例如:
<volist name="list" id="vo" >
{$i}.{$vo.name}
</volist> //如果要输出数组的索引,可以直接使用key变量,和循环变量不同的是,这个key是由数据本身决定,而不是循环控制的,例如:
<volist name="list" id="vo" >
{$key}.{$vo.name}
</volist>

2、Foreach

//foreach标签类似与volist标签,只是更加简单,没有太多额外的属性,例如:
<foreach name="list" item="vo">
{$vo.id}:{$vo.name}
</foreach>
name表示数据源 item表示循环变量。 可以输出索引,如下:
<foreach name="list" item="vo" >
{$key}|{$vo}
</foreach> 也可以定义索引的变量名
<foreach name="list" item="vo" key="k" >
{$k}|{$vo}
</foreach>

3、比较(eq或者equal、neq或者notequal、gt、egt、lt、elt、heq、nheq)

//比较标签用于简单的变量比较,复杂的判断条件可以用if标签替换,比较标签是一组标签的集合,基本上用法都一致,如下:
<比较标签 name="变量" value="值">
内容
</比较标签>
//通常比较标签的值是一个字符串或者数字,如果需要使用变量,只需要在前面添加“$”标志: 当vo对象的属性等于$a就输出
<eq name="vo:name" value="$a">{$vo.name}</eq>

4、范围(in、notin、between、notbetween)

//范围判断标签包括in notin between notbetween四个标签,都用于判断变量是否中某个范围。
<in name="id" value="1,2,3">
  id在范围内
<else/>
  id不在范围内
</in>

5、IF

<if condition="($name eq 1) OR ($name gt 100) "> value1
<elseif condition="$name eq 2"/>value2
<else /> value3
</if>

  

  

  

TP3快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. Spring解决循环依赖,你真的懂了吗?

    导读 前几天发表的文章SpringBoot多数据源动态切换和SpringBoot整合多数据源的巨坑中,提到了一个坑就是动态数据源添加@Primary接口就会造成循环依赖异常,如下图: 这个就是典型的构 ...

  2. this.current = params.page || 1 (前提是params对象一定要存在)

    this.current = params.page || 1 (前提是params对象一定要存在)

  3. Java 并发原子操作类(转)

    转自:https://www.jianshu.com/p/3632a0f9f083 线程不安全的高并发实现 客户端模拟执行 5000 个任务,线程数量是 200,每个线程执行一次,就将 count 计 ...

  4. IntelliJ IDEA 常用快捷键(转载)

    转自:http://www.open-open.com/lib/view/open1396578860887.html Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 ...

  5. ElegantSnap 一个优雅的,易用的iOS/tvOS/macOS自动布局框架, 超级详细的使用教程,多视图水平等宽/垂直等高排列

    ElegantSnap ElegantSnap(Base on SnapKit) to make Auto Layout easy and elegant on both iOS and OS X. ...

  6. Linux下安装Python3.4

    PS:如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 1. ...

  7. Thinkphp绕过宝塔getshell

    可以看到直接被拦了,经测试这里是敏感函数字符拦截,大部分有用的敏感函数都被拦了,这里面被拦的是phpinfo() Emmmm,怎么办呢..... 直接执行代码不行,那么就写入代码吧,用file_put ...

  8. 怎样设计最优的卷积神经网络架构?| NAS原理剖析

    虽然,深度学习在近几年发展迅速.但是,关于如何才能设计出最优的卷积神经网络架构这个问题仍在处于探索阶段. 其中一大部分原因是因为当前那些取得成功的神经网络的架构设计原理仍然是一个黑盒.虽然我们有着关于 ...

  9. 打造Worktile敏捷开发管理工具的思与惑

    从2019年初,我们团队准备开发一款适合研发团队使用的敏捷开发管理工具,那时候我们也在思考,到底什么样的工具才算是优秀的研发管理工具,研发管理的场景.方法和流派有很多,市面上关于研发管理工具的产品也是 ...

  10. ThunderNet :像闪电一样,旷视再出超轻量级检测器,高达267fps | ICCV 2019

    论文提出了实时的超轻量级two-stage detector ThunderNet,靠着精心设计的主干网络以及提高特征表达能力的CEM和SAM模块,使用很少的计算量就能超越目前的one-stage d ...