技术实践

ThinkPHP5中如何操作单个字段

在数据库查询操作中field和value方法是使用最频繁的,在此记录一下

羊先生的头像
羊先生2020.02.20 · 3 分钟阅读 · 142 阅读
ThinkPHP5中如何操作单个字段封面
文章正文还需 3 分钟

TP5操作

模糊查询where like or 一个字段符合多个条件的查询,

php 复制代码
$where['title'] = array(['like', "%bh%"],['like',"%nk%",'or');
$data=​Db::table('think_user')​
        ->field('id,title,keyword')
        ->where($where)
        ->select();

读取某个字段的值,在查询操作中field方法是使用最频繁的。

php 复制代码
Db::table('think_user')->field('id,title,content')->select();

value 方法查询结果不存在,返回 null

查询某个字段的值可以也可以用

php 复制代码
Db::table('think_user')->where('id',1)->value('name'); // 返回某个字段的值

字段排除

如果我希望获取排除数据表中的content字段(文本字段的值非常耗内存)之外的所有字段值,我们就可以使用field方法的排除功能,例如下面的方式就可以实现所说的功能:

php 复制代码
Db::table('think_user')->field('content',true)->select();
更新某个字段的值:
php 复制代码
Db::table('think_user')->where('id',1)->setField('name', 'thinkphp');

 
setField 方法返回影响数据的条数,没修改任何数据字段返回 0

自增或自减一个字段的值:

setInc/setDec 如不加第二个参数,默认值为1

php 复制代码
Db::table('think_user')->where('id', 1)->setInc('score');// score 字段加 1
Db::table('think_user')->where('id', 1)->setInc('score', 5);// score 字段加 5
Db::table('think_user')->where('id', 1)->setDec('score');// score 字段减 1
Db::table('think_user')->where('id', 1)->setDec('score', 5);// score 字段减 5

延迟更新

setInc/setDec支持延时更新,如果需要延时更新则传入第三个参数
下例中延时10秒,给score字段增加1

php 复制代码
Db::table('think_user')->where('id', 1)->setInc('score', 1, 10);

TP3

读取某个字段的值,使用getField方法

php 复制代码
$User = M("User"); // 实例化User对象
$nickname = $User->where('id=3')->getField('nickname'); // 获取ID为3的用户的昵称 

当只有一个字段的时候,默认返回一个值。

如果需要返回数组,可以用:

php 复制代码
$this->getField('id',true); // 获取id数组

如果传入多个字段的话,默认返回一个关联数组(不过不推荐用这个方法):

php 复制代码
$User = M("User"); // 实例化User对象
$list = $User->getField('id,nickname');// 获取所有用户的ID和昵称列表 

返回的list是一个数组,键名是用户的id, 键值是用户的昵称nickname。

getField方法的sepa参数还可以支持限制数量,例如:

php 复制代码
$this->getField('id,name',5); // 限制返回5条记录
$this->getField('id',3); // 获取id数组 限制3条记录

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

php 复制代码
$User = M("User"); // 实例化User对象
$User-> where('id=5')->setField('name','ThinkPHP');// 更改用户的name值

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

php 复制代码
$User = M("User"); // 实例化User对象
$data = array('name'=>'ThinkPHP','email'=>'ThinkPHP@gmail.com');
$User-> where('id=5')->setField($data);// 更改用户的name和email的值

setInc和setDec字段自增。

php 复制代码
$User = M("User"); // 实例化User对象
$User->where('id=5')->setInc('score',3); // 用户的积分加3
$User->where('id=5')->setInc('score'); // 用户的积分加1
$User->where('id=5')->setDec('score',5); // 用户的积分减5
$User->where('id=5')->setDec('score'); // 用户的积分减1