thinkphp5遇到必须使用Db::raw方法而无法使用json格式传递Db对象

今天使用Thinkphp5做异步任务传递where参数时遇到一个问题:

有一段如下代码:

$where['jst.supplier'] = ['exp', Db::raw('>0 or jst.is_supplier=1')];

在使用swoole做异步任务时需要把where参数传递给异步任务处理,因为无法传递数组和对象只能传递字符串,所以需要把where数组转换成字符串;

以前一直是使用json_encode函数转换json字符串,结果在今天使用发现报错:

 进一步追查发现,swoole_client传递的参数就有问题

原始参数是这样的:

 结果使用json_encode生成之后是这样的:

 网上找了很多办法都不太好,

最后尝试使用  serialize 函数对数组进行序列化,然后swoole服务端使用 unserialize 转换回数组,结果发现Db对象完全保留未发生丢失。

serialize方法虽然不json格式可读性高、占用字符少;但还是有可取之处。

 

相关文章

极简概括: PHP 的开源内存缓存扩展,类比Redis,但是一般都...
请看如下代码: $list = [1,2,4,5]; $list2 = [5,6,7,9]; fo...
一、nginx 安装 1. 在nginx官网下载nginx源码	提供一...
先看图 数据条数:9000+ 第1,2行,golangʾxcelize方...
今天使用Thinkphp5做异步任务传递where参数时遇到一个问题:...
汇总 PHP5.1: autoload PDO MySQLi 类型约束 PHP5.2: JSON...