Think PHP5.0模型定义与新增数据
复习:
一.查询数据
最普遍的查询是判断某个字段是否等于某个值。
select()方法用于查询数据集,如果查询成功,则返回一个二维数组,如果没有满足条件的则返回一个空数组。
find()方法用于查询满足条件的第一个记录(即使查询条件有多个符合的数据),如果查询成功,则返回一个一维数组,如果没有满足条件的则默认返回null。
$result = Db::name('data') ->where('status',1) ->find();
$result1 = Db::name('data') ->where('status',1) ->select();
效果如下:
查询表达式
使用查询表达式时,where方法的参数依次为:
where(字段名,查询条件,查询值)
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
表达式 | 含义 |
---|---|
EQ、= | 等于(=) |
NEQ、<> | 不等于(<>) |
GT、> | 大于(>) |
EGT、>= | 大于等于(>=) |
LT、< | 小于(<) |
ELT、<= | 小于等于(<=) |
LIKE | 模糊查询 |
[NOT] BETWEEN | (不在)区间查询 |
[NOT] IN | (不在)IN 查询 |
[NOT] NULL | 查询字段是否(不)是NULL |
[NOT] EXISTS | EXISTS查询 |
EXP | 表达式查询,支持SQL语法 |
> time | 时间比较 |
< time | 时间比较 |
between time | 时间比较 |
notbetween time | 时间比较 |
表达式查询的用法示例如下:
EQ :等于(=)
例如:
where('id','eq',100);
where('id','=',100);
和下面的查询等效
where('id',100);
表示的查询条件就是 id = 100
NEQ: 不等于(<>)
例如:
where('id','neq',100);
where('id','<>',100);
表示的查询条件就是 id <> 100
GT:大于(>)
例如:
where('id','gt',100);
where('id','>',100);
表示的查询条件就是 id > 100
EGT:大于等于(>=)
例如:
where('id','egt',100);
where('id','>=',100);
表示的查询条件就是 id >= 100
LT:小于(<)
例如:
where('id','lt',100);
where('id','<',100);
表示的查询条件就是 id < 100
ELT: 小于等于(<=)
例如:
where('id','elt',100);
where('id','<=',100);
表示的查询条件就是 id <= 100
[NOT] LIKE: 同sql的LIKE
例如:
where('name','like','thinkphp%');
查询条件就变成 name like 'thinkphp%'
[NOT] BETWEEN :同sql的[not] between
查询条件支持字符串或者数组,例如:
where('id','between','1,8');
和下面的等效:
where('id','between',[1,8]);
查询条件就变成 id BETWEEN 1 AND 8
[NOT] IN: 同sql的[not] in
查询条件支持字符串或者数组,例如:
where('id','not in','1,5,8');
和下面的等效:
where('id','not in',[1,5,8]);
查询条件就变成 id NOT IN (1,5, 8)
[NOT] IN
查询支持使用闭包方式
[NOT] NULL :
查询字段是否(不)是Null
,例如:
where('name', null);
where('title','null');
where('name','not null');
如果你需要查询一个字段的值为字符串null
或者not null
,应该使用:
where('title','=', 'null');
where('name','=', 'not null');
EXP:表达式
支持更复杂的查询情况 例如:
where('id','in','1,3,8');
可以改成:
where('id','exp',' IN (1,3,8) ');
//模糊查询
$result = Db : : name( 'data')->where('name','like','%明%')->select(); //查询数据表中还含有“明”的名字
$result = Db : : name( 'data')->where('name','like','_明_')->select(); //查询数据表中前后均含有“明”的名字指明单个
//区间查询
$result = Db : : name( 'data')->where('id','between','[2,6]')->select(); //查询数据表中还含有“明”的名字
二.添加数据
添加多条数据
添加多条数据直接向 Db 类的 insertAll 方法传入需要添加的数据即可
$data = [
['foo' => 'bar', 'bar' => 'foo'],
['foo' => 'bar1', 'bar' => 'foo1'],
['foo' => 'bar2', 'bar' => 'foo2']
];
Db::name('user')->insertAll($data);
insertAll 方法添加数据成功返回添加成功的条数。
三.更新数据
更新某个字段的值:
Db::table('think_user')
->where('id',1)
->setField('name', 'thinkphp');
setField 方法返回影响数据的条数,没修改任何数据字段返回 0
think PHP5.0的模型是一种对象关系映射(Object/Relation/Mapping,简称ORM)的封装,并且提供了简洁的ActiveRecord实现,一般来说,每个数据表会和一个模型对应。
ORM的基本特性就是表映射到记录,记录映射到对象,字段映射到对象属性。模型是一种对象化的操作封装,而不是简单的CURD(增删改查)操作,简单的CURD操作直接使用前面的Db类即可。
模型类和Db类区别主要在于对象的封装,Db类的查询默认返回的是数组(或者集合),模型是比Db类更高级的数据封装,支持模型关联,模型事件。
一、模型定义
第一步:创建一个think_user数据表
第二步:为这个数据表建立一个模型
大多数时候,我们无需为模型定义任何的属性和方法即可完成基本的操作,因为模型会自动对应一个数据表。
二、基本操作之新增数据
因为在mvc中,控制器负责业务逻辑部分,所以我们需要创建一个和表名一样控制器并增加add方法:
在当前文件给app\index\model\User 模型定义了一个别名UserModel是为了避免与当前的app\index\controller\User产生冲突,如果当前控制器类不是User的话可以不需要定义UserModel 别名,另外还有一种方式省略去别名定义,系统支持统一对控制器添加Controller后缀,修改配置:(类名与模型名相同时)
//是否启用控制器后缀
‘ controller_suffix ' => true;
然后控制器类文件改名为UserController.php。
默认情况下,实例化模型类后面执行的save操作都是执行数据库insert操作;
三、批量新增数据
也可以通过直接运行数据的批量新增,给控制器添加如addLIst操作方法:
时间:2018.4.26