Think PHP5.0模型定义与新增数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41665015/article/details/80092301

复习:

一.查询数据

最普遍的查询是判断某个字段是否等于某个值。

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 :等于(=)

例如:

 
 
  1. where('id','eq',100);
  2. where('id','=',100);

和下面的查询等效

 
 
  1. where('id',100);

表示的查询条件就是 id = 100

NEQ: 不等于(<>)

例如:

 
 
  1. where('id','neq',100);
  2. where('id','<>',100);

表示的查询条件就是 id <> 100

GT:大于(>)

例如:

 
 
  1. where('id','gt',100);
  2. where('id','>',100);

表示的查询条件就是 id > 100

EGT:大于等于(>=)

例如:

 
 
  1. where('id','egt',100);
  2. where('id','>=',100);

表示的查询条件就是 id >= 100

LT:小于(<)

例如:

 
 
  1. where('id','lt',100);
  2. where('id','<',100);

表示的查询条件就是 id < 100

ELT: 小于等于(<=)

例如:

 
 
  1. where('id','elt',100);
  2. where('id','<=',100);

表示的查询条件就是 id <= 100

[NOT] LIKE: 同sql的LIKE

例如:

 
 
  1. where('name','like','thinkphp%');

查询条件就变成 name like 'thinkphp%' 

[NOT] BETWEEN :同sql的[not] between

查询条件支持字符串或者数组,例如:

 
 
  1. where('id','between','1,8');

和下面的等效:

 
 
  1. where('id','between',[1,8]);

查询条件就变成 id BETWEEN 1 AND 8

[NOT] IN: 同sql的[not] in

查询条件支持字符串或者数组,例如:

 
 
  1. where('id','not in','1,5,8');

和下面的等效:

 
 
  1. where('id','not in',[1,5,8]);

查询条件就变成 id NOT IN (1,5, 8)

[NOT] IN查询支持使用闭包方式

[NOT] NULL :

查询字段是否(不)是Null,例如:

 
 
  1. where('name', null);
  2. where('title','null');
  3. where('name','not null');

如果你需要查询一个字段的值为字符串null或者not null,应该使用:

 
 
  1. where('title','=', 'null');
  2. where('name','=', 'not null');

EXP:表达式

支持更复杂的查询情况 例如:

 
 
  1. where('id','in','1,3,8');

可以改成:

 
 
  1. 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 方法传入需要添加的数据即可

 
 
  1. $data = [
  2. ['foo' => 'bar', 'bar' => 'foo'],
  3. ['foo' => 'bar1', 'bar' => 'foo1'],
  4. ['foo' => 'bar2', 'bar' => 'foo2']
  5. ];
  6. Db::name('user')->insertAll($data);

insertAll 方法添加数据成功返回添加成功的条数。

三.更新数据

更新某个字段的值:

 
 
  1. Db::table('think_user')
  2. ->where('id',1)
  3. ->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

猜你喜欢

转载自blog.csdn.net/qq_41665015/article/details/80092301