【Tp3.2升级记录】升级ThinkPhp5.0后,select查询的结果问题处理

前言:最近由于各种原因,需要将一个TP3.2.0项目升级到比较新的版本,以减少系统漏洞,目前目标是5.0的最新版本。

问题:由TP3.2升级TP5.0后,select查询的结果有所不同,导致foreach使用的时候出现问题,按官方文档的描述是:  

  新版的模型查询返回默认对象,系统默认增加了toArray方法,许多开发者在all或select尝试使用toArray来转换为数组,在此希望开发者能理解对象的概念,尝试使用对象进行数据的使用,或者使用db方法进行数据库的操作,也提醒一下部分滥用toArray的开发者,all或select结果是对象的数组集合,是无法使用toArray进行转换的。

  简单来说就是查询的结果原来返回的是数组,现在返回的是一个数组,数组中子一级是对象类型,而且不能直接使用toArray处理。

解决方法:

  将select()查询的对象结果转化一下,转化为数组:

use thinkCollection
$list = $this->field($field)->where($map)->order('sort')->select();
// Collection是TP5的内置类
$list = (new Collection($list))->toArray();

嗯,就这样,就酱!

原文地址:https://www.cnblogs.com/wxdblog/p/14611976.html