ThinkPHP之数据库操作

数据库的操作是由模型来管理的,模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以用模型的名字自动对应数据表的。 模型类的命名规则是除去表前缀的数据表名称,采用驼峰法命名,并且首字母大写,然后加上模型层的名称(默认定义是Model)(看得很懵逼对吧,我也是,上面这段话是百度的,下面实例化要好好看了)

TP提供了快捷实例化模型的API,上面的直接实例化的时候我们需要传入完整的类名,系统提供了一个快捷方法D用于数据模型的实例化操作。 要实例化自定义模型类,可以使用下面的方式:

一、数据写入

向user数据表中写入一条数据

$user = M('user'); //实例化user对象,user是表名

$data['id'] = 5;

$data['username'] = benny;

$user->add('$data');

二、数据查询

1、读取数据集

$user = M('user');

$map['id'] = I('id',0,'int');

//find()方法,读取数据表中的一行数据(或者关联数据)

$data = $user->where(array('id'=>$map['id']))->find(); //array('id'=>$map['id'])等同于$map

dump($data);

find方法查询数据的时候可以配合相关的连贯操作方法,其中最关键的则是where方法。 如果查询出错,find方法返回false,如果查询结果为空返回NULL,查询成功则返回一个关联数组(键值是字段名或者别名)。

读取数据集其实就是获取数据表中的多行记录(以及关联数据),使用select方法

$user = M('user');

//查找select值为1的用户数据,以创建时间排序 ,返回10条数据

$data = $user->where('status = 1')->order('create_time')->limit(10)->select();

如果查询出错,select的返回值是false,如果查询结果为空,则返回NULL,否则返回二维数组。

读取字段值其实就是获取数据表中的某个列的多个或者单个数据,最常用的方法是 getField方法。

$user = M('user');

//获得id为1 的用户的username

$data = $user->where(‘id =1 ’)->getField('username');

2、数据更新

更新数据使用save方法

$user = M('user'); //实例化user对象,user是表名

$data['username'] = benny;

$data['password'] = 123;

$user->where('id = 1 ')->save('$data');//根据条件更新记录

如果只是更新个别字段的值,可以使用setField方法。

$user = M('user');

//更改用户的username

$data = $user->where(‘id =1 ’)->setField('username','benny');

setField方法支持同时更新多个字段,只需要传入数组即可,

$user = M('user');

//更改用户的username 和password

$data = array('username'=>'benny','password'=>'123');

$data = $user->where(‘id =1 ’)->setField($data);

3、数据删除

ThinkPHP删除数据使用delete方法

$user = M('user');

$user->delete(1);

表示删除主键为1的数据,delete方法可以删除单个数据,也可以删除多个数据,这取决于删除条件

delete方法的返回值是删除的记录数,如果返回值是false则表示SQL出错,返回值如果为0表示没有删除任何数据。 也可以用order和limit方法来限制要删除的个数:

$user->where('id = 1')->order('create_time')->limit('5')->delete();

为了避免错删数据,如果没有传入任何条件进行删除操作的话,不会执行删除操作

(原文写于2017.8.16)

原文发布于微信公众号 - 程序员的碎碎念(gh_53e607dd4782)

原文发表时间:2017-08-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客猴

Django 学习笔记之模型高级用法(上)

前面有两篇文章简单介绍 Django 的模型,这一部分算是基础知识。我自己近期也总做了下总结,将花大概两篇的篇幅来分享下模型的一些高级用法。

683
来自专栏云数据库

MySQL5.7 JSON实现简介

本文主要介绍在MySQL 5.7.7开始引入的非结构化数据类型JSON的特性以及具体的实现方式(包括存储方式)。首先介绍为什么要引入JSON的原生数据类型的支持...

2194
来自专栏蓝天

Redis基于eval的多字段原子增量计算

一些应用场景需要对多个值进行原子计数,Redis的eval+hincrby可以达到目标,但如果计算的字段比较多时,效率会是个问题,它的时间复杂度为O(N),而...

722
来自专栏Dato

浅谈 Mybatis中的 ${ } 和 #{ }的区别

好了,真正做开发也差不多一年了。一直都是看别人的博客,自己懒得写,而且也不会写博客,今天就开始慢慢的练习一下写博客吧。前段时间刚好在公司遇到这样的问题。 一、举...

3379
来自专栏魏琼东

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM中的查询

前文回顾           前面的文章一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM的基本操作一文给大家介绍了如果使用ORM...

1995
来自专栏计算机视觉与深度学习基础

Leetcode 37 Sudoku Solver 深搜基础题+位运算

Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cel...

1867
来自专栏腾讯云数据库团队的专栏

MySQL 5.7 JSON 实现简介

本文主要介绍了MySQL在5.7.7之后引入的原生JSON支持的特性,说明了引入JSON类型的好处,并结合具体的示例介绍了MySQL在JSON类型上对外的接口以...

5.1K1
来自专栏恰同学骚年

Entity Framework 基础知识走马观花

  (1)通过选择以XML方式打开edmx文件,我们可以可以清楚地看到,edmx模型文件本质就是一个XML文件;

1072
来自专栏点滴积累

geotrellis使用(十一)实现空间数据库栅格化以及根据属性字段进行赋值

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 安装空...

3627
来自专栏osc同步分享

mybatis 的一些常用功能

1. association 查询结果的一对一关联: <resultMap id="blogResult" type="Blog"> <id propert...

2828

扫码关注云+社区