thinkphp5遇到必須使用Db::raw方法而無法使用json格式傳遞Db物件

是是非非01發表於2024-05-22

今天使用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格式可讀性高、佔用字元少;但還是有可取之處。

相關文章