1.php查询数据,数据查询 · thinkphp5 · 看云

# **Query**

**查询一个数据**

find 方法返回数组,查询结果不存在,返回 null

~~~

// table方法必须指定完整的数据表名

\think\Db::table('think_user')->where('id',1)->find();

~~~

**查询多条数据**

select 方法根据`resultset_type`返回数组或者数据集类,查询结果不存在,返回空数组

~~~

\think\Db::name('user')->where('status',1)->select();

~~~

### **值和列查询**

**查询某个字段的值**

> value 方法 返回查询字段的值,查询结果不存在,返回 null

~~~

// 返回某个字段的值

\think\Db::table('think_user')->where('id',1)->value('name');

~~~

**查询某一列的值**

> column 方法 返回数组,查询结果不存在,返回空数组[]

~~~

// 返回数组

\think\Db::table('think_user')->where('status',1)->column('name');

// 指定索引

\think\Db::table('think_user')->where('status',1)->column('name','id');

\think\Db::table('think_user')->where('status',1)->column('id,name'); // 同tp3的getField

~~~

### **数据分批处理**

chunk 方法一次获取结果集的一小块,然后填充每一小块数据到要处理的闭包,该方法在编写处理大量数据库记录的时候非常有用

~~~

//每次处理 100 个用户记录

\think\Db::table('think_user')->chunk(100, function($users) {

foreach ($users as $user) {

//

}

});

// 或者交给回调方法myUserIterator处理

\think\Db::table('think_user')->chunk(100, 'myUserIterator');

//可以通过从闭包函数中返回false来中止对数据集的处理:

\think\Db::table('think_user')->chunk(100, function($users) {

// 处理结果集...

return false;

});

//也支持在chunk方法之前调用其它的查询方法

\think\Db::table('think_user')->where('score','>',80)->chunk(100, function($users) {

foreach ($users as $user) {

//

}

});

//chunk方法的处理默认是根据主键查询,支持指定字段

\think\Db::table('think_user')->chunk(100, function($users) {

// 处理结果集...

return false;

},'create_time');

//chunk方法支持指定处理数据的顺序

\think\Db::table('think_user')->chunk(100, function($users) {

// 处理结果集...

return false;

},'create_t

~~~

## **Model**

记得引用命名空间

### **获取单个数据**

>[danger]如果你是在模型内部,请不要使用`$this->name`的方式来获取数据,请使用`$this->getAttr('name')`替代。

`get`或者`find`方法(虽然find是Query里的方法)返回的是当前模型的对象实例,可以使用模型的方法。

~~~

取出主键为1的数据

$user = User::get(1);

echo $user->name;

// 使用数组查询

$user = User::get(['name' => 'thinkphp']);

// 使用闭包查询

$user = User::get(function($query){

$query->where('name', 'thinkphp');

});

echo $user->name;

$user = new User();

// 实例化模型后调用查询方法

$user->where('name', 'thinkphp')->find();

~~~

### **获取多个数据**

模型的`all`方法或者`select`(虽然select是QUery类里的)方法返回的是一个包含模型对象的二维数组或者数据集对象。设置返回类型参看数据集章节

~~~

// 根据主键获取多个数据

$list = User::all('1,2,3');

// 或者使用数组

$list = User::all([1,2,3]);

foreach($list as $key=>$user){

echo $user->name;

}

//数组方式和闭包方式的数据查询的区别在于,数组方式只能定义查询条件,闭包方式可以支持更多的连贯操作,包括排序、数量限制等。

// 使用数组查询

$list = User::all(['status'=>1]);

// 使用闭包查询

$list = User::all(function($query){

$query->where('status', 1)->limit(3)->order('id', 'asc');

});

foreach($list as $key=>$user){

echo $user->name;

}

$user = new User();

//在实例化模型后调用查询方法只能用select

$user->where('name', 'thinkphp')

->limit(10)

->order('id', 'desc')

->select();

~~~

### **获取某个字段或者某个列的值**

>[danger]注意`value`和`column`方法返回的不再是一个模型对象实例,而是单纯的值或者某个列的数组。

~~~

// 获取某个用户的积分

User::where('id',10)->value('score');

// 获取某个列的所有值

User::where('status',1)->column('name');

// 以id为索引

User::where('status',1)->column('name','id');

User::where('status',1)->column('id,name'); // 同tp3的getField

~~~

### **动态查询**

::getBy字段名()

~~~

// 根据name字段查询用户

$user = User::getByName('thinkphp');

// 根据email字段查询用户

$user = User::getByEmail('thinkphp@qq.com');

~~~

## 通过Query类查询

当模型以静态方法的形式调用Query的链式操作方法时,自动转为Query数据库查询

~~~

User::where('id','>',10)->select();

User::where('name','thinkphp')->find();

//如果不是链式方法则后面不能在跟任何方法,如:

//分批处理

User::chunk(100,function($users){

foreach($users as $user){

// 处理user模型对象

}

});

~~~

## 查询缓存

`get`方法和`all`方法的第三个参数表示是否使用查询缓存,或者设置缓存标识。

由于第二个参数是关联预载入定义,`V5.0.6+`版本开始,可以直接在第二个参数传入true表示开启查询缓存。

~~~

$user = User::get(1,'',true);

$list = User::all('1,2,3','',true);

~~~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值