php find函数返回值,find方法 - ThinkPHP5数据库实例详解 - php中文网手册

find方法的使用

1、功能:获取数据表中,满足条件的单条记录。

2、源码位置:/thinkphp/library/think/db/Query.php (1954行 ~ 2041行)

/**

* 查找单条记录

* @access public

* @param array|string|Query|\Closure $data

* @return array|false|\PDOStatement|string|Model

* @throws DbException

* @throws ModelNotFoundException

* @throws DataNotFoundException

*/

public function find($data = null)

{

if ($data instanceof Query) {

return $data->find();

} elseif ($data instanceof \Closure) {

call_user_func_array($data, [ & $this]);

$data = null;

}

// 分析查询表达式

$options = $this->parseExpress();

if (!is_null($data)) {

// AR模式分析主键条件

$this->parsePkWhere($data, $options);

}

$options['limit'] = 1;

$result = false;

if (empty($options['fetch_sql']) && !empty($options['cache'])) {

// 判断查询缓存

$cache = $options['cache'];

if (true === $cache['key'] && !is_null($data) && !is_array($data)) {

$key = 'think:' . (is_array($options['table']) ? key($options['table']) : $options['table']) . '|' . $data;

} else {

$key = is_string($cache['key']) ? $cache['key'] : md5(serialize($options));

}

$result = Cache::get($key);

}

if (!$result) {

// 生成查询SQL

$sql = $this->builder()->select($options);

// 获取参数绑定

$bind = $this->getBind();

if ($options['fetch_sql']) {

// 获取实际执行的SQL语句

return $this->connection->getRealSql($sql, $bind);

}

// 执行查询

$result = $this->query($sql, $bind, $options['master'], $options['fetch_class']);

if ($result instanceof \PDOStatement) {

// 返回PDOStatement对象

return $result;

}

if (isset($cache)) {

// 缓存数据

if (isset($cache['tag'])) {

Cache::tag($cache['tag'])->set($key, $result, $cache['expire']);

} else {

Cache::set($key, $result, $cache['expire']);

}

}

}

// 数据处理

if (!empty($result[0])) {

$data = $result[0];

if (!empty($this->model)) {

// 返回模型对象

$model = $this->model;

$data = new $model($data);

$data->isUpdate(true, isset($options['where']['AND']) ? $options['where']['AND'] : null);

// 关联查询

if (!empty($options['relation'])) {

$data->relationQuery($options['relation']);

}

if (!empty($options['with'])) {

// 预载入

$data->eagerlyResult($data, $options['with'], is_object($result) ? get_class($result) : '');

}

}

} elseif (!empty($options['fail'])) {

$this->throwNotFound($options);

} else {

$data = null;

}

return $data;

}

3、参数与返回值:

阅读源码发现:参数支持四种类型:

序号

参数类型

说明

1

数组

首选

2

字符串

灵活、直观,但不够规范

3

对象

用的不多,后面有实例演示

4

闭包

即匿名函数,详情见后观实例

参数最终组成一条用在SQL语句中WHERE的条件表达式,;

返回值:

序号

参数类型

说明

1

一维关联数组

与数据表某条记录对应,键名对应字段名,键值对应字段值,最常用

2

布尔值

查询是否成功?true:成功,faluse:失败

3

PDO对象

不常用

4

模型

这在模型课程中,我们再详细讨论

4、适用环境:

根据主键查询,确定只返回一条记录;

如果返回多满足条件的记录,该方法仅返回第一条,一定要注意;

5、调用语法(以:tp5_staff表为例):

通过 Db.php类中的:static _callStatic() 自动实现静态方法调用(了解即可)

Query对象调用:find(查询表达式)

序号

参数类型

说明

1

主键

find( '主键' );

2

数组

find( [ '条件' => 表达式 ] );

3

闭包

find( function ($query) { $query = 查询表达式 } )

6、实例:

现在表中的数据如下图:

bfa453ff8316e2e5150b7ee34aff818d.png

选择tp5_staff表,查询id等于1006的数据(参数为主键)

find('1006'):

namespace app\index\controller;

use think\Db;

class Index {

public function index(){

//使用Db类方法查询,并输出查询结果

dump(Db::table('tp5_staff')->find('1006'));

}

}

选择tp5_staff表,查询id等于1006的数据(参数为数组)

将代码中:find( '1006' ) 换成 : find( [ 'id' => '1006' ] );

namespace app\index\controller;

use think\Db;

class Index {

public function index(){

//使用Db类方法查询,并输出查询结果

dump(Db::table('tp5_staff')->find(['id'=>'1006']));

}

}

选择tp5_staff表,查询id等于1006的数据(参数为对象属性)

namespace app\index\controller;

use think\Db;

class Index {

public function index(){

//创建标准对象$query

$query = new \stdClass;

//$query对象创建属性id ,并赋值为主键

$query -> id = 1006;

//将$query->id做为条件赋给条件变量 $where

$where = $query -> id;

//根据对象属性设置的条件,查询数据

dump(Db::table('tp5_staff')->find($where));

}

}

选择tp5_staff表,查询id等于1006的数据(参数为闭包)

namespace app\index\controller;

use think\Db;

class Index {

public function index(){

//直接用Db类调用find(),将所有条件用闭包函数给出

dump(Db::find(function ($query){

$query = Db::table('tp5_staff')->where(['id'=>1006]);

}));

}

}

闭包函数:

也要匿名函数,顾名思议,该函数没有名称,不能按名调用;

匿名函数以变量为载体,用变量调用;

闭包函数非常适合创建非常复杂的查询条件,请一定要读懂学会;

如果仍觉得理解困难,请再复习一下PHP函数部分知识。

运行结果:

array(7) {

["id"] => int(1006)

["name"] => string(9) "西门庆"

["sex"] => int(0)

["age"] => int(22)

["salary"] => float(19801)

["dept"] => string(9) "市场部"

["hiredate"] => string(10) "2008-12-02"

}

7、局限性或注意事项:

find方法仅返回第一条满足条件的记录,适合预先知道只会有一条或没有记录时使用;

闭包中的很多条件,可以用在find之前的链式操作中,但推荐全部放在闭包中;

日常开发中,我们更多的使用模型中的get方法获取单条记录。

小作业:

find方法很重要,官方手册写得很简单,建议参照本教程,多练习几遍。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThinkPHP 是一个优秀的PHP框架,可以帮助我们快速开发高质量的 Web 应用程序。因此,使用 ThinkPHP 来开发 OA 系统是非常方便和实用的。下面我们来讨论一下如何使用 ThinkPHP 来开发一个人力资源管理系统。 1. 创建数据库 首先,我们需要创建一个数据库来存储我们的数据。在该数据库中,我们需要创建一些表来存储员工信息、部门信息、职位信息、薪资信息等等。我们可以使用 MySQL 数据库来创建这些表。 2. 创建 ThinkPHP 项目 在创建完数据库之后,我们需要创建一个 ThinkPHP 项目来实现我们的 OA 系统。我们可以使用 ThinkPHP 官方提供的命令行工具来创建项目,具体命令如下: ``` composer create-project topthink/think oa ``` 执行完上述命令后,会在当前目录下创建一个名为 oa 的 ThinkPHP 项目。 3. 配置数据库 在项目创建好之后,我们需要配置数据库连接信息。在项目的 `.env` 文件中,我们可以配置数据库的相关信息,如下所示: ``` # 数据库类型 DB_CONNECTION=mysql # 数据库地址 DB_HOST=127.0.0.1 # 数据库端口 DB_PORT=3306 # 数据库名 DB_DATABASE=oa # 数据库用户名 DB_USERNAME=root # 数据库密码 DB_PASSWORD= ``` 我们需要根据自己的实际情况来修改这些配置项。 4. 创建控制器和模型 在 ThinkPHP 中,我们可以通过创建控制器和模型来实现 OA 系统的功能。我们可以使用命令行工具来快速创建控制器和模型,具体命令如下: ``` # 创建控制器 php think make:controller Index # 创建模型 php think make:model User ``` 执行完上述命令后,会在项目中生成一个名为 Index 的控制器和一个名为 User 的模型。 5. 实现功能 在创建好控制器和模型之后,我们就可以开始实现 OA 系统的功能了。比如,我们可以实现员工信息的添加、修改、删除、查询等操作,部门信息的添加、修改、删除、查询等操作,职位信息的添加、修改、删除、查询等操作,薪资信息的添加、修改、删除、查询等操作等等。我们可以在控制器中编写处理逻辑,在模型中编写数据库操作。最后,我们可以使用视图来展示数据。 6. 测试系统 在实现完功能之后,我们需要对系统进行测试。我们可以使用浏览器或者 Postman 等工具来测试系统的功能是否正常。如果有问题,我们可以根据错误提示来进行调试和修复。 总之,使用 ThinkPHP 来开发 OA 系统是非常方便和实用的。我们可以根据自己的实际情况来定制系统的功能和界面,从而更好地管理公司的人力资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值