webman redis-queue 消息里面調(diào)用think-orm出現(xiàn)更新數(shù)據(jù)時(shí)save方法update方法都報(bào)錯(cuò)
這里詳細(xì)描述問(wèn)題
"workerman/webman-framework": "^1.5.0",
webman/think-orm": "^1.1",
"webman/redis-queue": "^1.2",
"w7corp/easywechat": "^6.7",
// 第三重驗(yàn)證
if ($order['order_sn'] == $data['order_sn'] && $user['id'] == $order['user_id']) {
// 查詢訂單驗(yàn)證是否為支付
$app = new Application(config('wxpay'));
$response = $app->getClient()->get("v3/pay/transactions/out-trade-no/{$data['order_sn']}", [
'query'=>[
'mchid' => $app->getMerchant()->getMerchantId()
]
]);
// {
// "amount": {
// "currency": "CNY",
// "payer_currency": "CNY",
// "payer_total": 3,
// "total": 3
// },
// "appid": "wx6fb*****9",
// "attach": "",
// "bank_type": "OTHERS",
// "mchid": "160****4",
// "out_trade_no": "GS202310***2459799",
// "payer": {
// "openid": "oCsvH*****5Moxrjy-ag"
// },
// "promotion_detail": {
//
// },
// "success_time": "2023-10-26T21:12:52+08:00",
// "trade_state": "SUCCESS",
// "trade_state_desc": "支付成功",
// "trade_type": "JSAPI",
// "transaction_id": "4200002******01424672"
// }
// Cache::set('query_order',$response->toArray(),600);
// 第四重驗(yàn)證,查詢數(shù)據(jù)訂單是否真實(shí)
$payOrder = $response->toArray();
if (!isset($payOrder['transaction_id'])) {
throw new \Exception('訂單查詢失敗。'.json_encode($payOrder));
}
// 真正的邏輯
$orderData = [
'package' => $payOrder,
'transaction_id' => $payOrder['transaction_id'],
'pay_type' => $payOrder['bank_type'],
'status' => 1
];
// 報(bào)錯(cuò)這下面的代碼,用 save($orderData) 以及 update($orderData) 等方法都嘗試了,都報(bào)錯(cuò)
$order = Order::where('order_sn',$payOrder['out_trade_no'])->find();
$order->package = $payOrder;
$order->transaction_id = $payOrder['transaction_id'];
$order->pay_type = $payOrder['bank_type'];
$order->status = 1;
$result = $order->save();
#0 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/Builder.php(81): {closure}()
#1 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/builder/Mysql.php(263): think\db\Builder->parseData()
#2 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/PDOConnection.php(1164): think\db\builder\Mysql->update()
#3 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/BaseQuery.php(1260): think\db\PDOConnection->update()
#4 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/Model.php(673): think\db\BaseQuery->update()
#5 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/PDOConnection.php(1521): think\Model->think\{closure}()
#6 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/concern/Transaction.php(47): think\db\PDOConnection->transaction()
#7 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/Model.php(665): think\db\BaseQuery->transaction()
#8 /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/Model.php(564): think\Model->updateData()
#9 /www/wwwroot/脫敏標(biāo)志/app/queue/redis/WeChatPay.php(157): think\Model->save()
#10 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/redis-queue/src/Client.php(221): app\queue\redis\WeChatPay->consume()
#11 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/redis/src/Client.php(421): Workerman\RedisQueue\Client->Workerman\RedisQueue\{closure}()
#12 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/workerman/Connection/TcpConnection.php(646): Workerman\Redis\Client->Workerman\Redis\{closure}()
#13 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/workerman/Events/Select.php(311): Workerman\Connection\TcpConnection->baseRead()
#14 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/workerman/Worker.php(1635): Workerman\Events\Select->loop()
#15 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/workerman/Worker.php(1426): Workerman\Worker::forkOneWorkerForLinux()
#16 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/workerman/Worker.php(1400): Workerman\Worker::forkWorkersForLinux()
#17 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/workerman/Worker.php(560): Workerman\Worker::forkWorkers()
#18 /www/wwwroot/脫敏標(biāo)志/vendor/workerman/webman-framework/src/support/App.php(131): Workerman\Worker::runAll()
#19 /www/wwwroot/脫敏標(biāo)志/start.php(4): support\App::run()
#20 {main}#20 {main}ErrorException: Undefined array key 0 in /www/wwwroot/脫敏標(biāo)志/vendor/topthink/think-orm/src/db/Builder.php:81
Stack trace
引用關(guān)系都沒(méi)有問(wèn)題,類名以及命名空間都是沒(méi)有問(wèn)題的。
查詢寫(xiě)緩存是可以查詢到的,但凡調(diào)用save方法,就提示不讓更新?消息隊(duì)列里面不支執(zhí)行orm更新?只能查詢 ?好像我用create方法也不行。
$order->package = $payOrder;
$order->save();
這句代碼有問(wèn)題,$payOrder是數(shù)組,php數(shù)組無(wú)法直接存入數(shù)據(jù)庫(kù),一般是轉(zhuǎn)換為json字符串再存入
$order->package = json_encode($payOrder);
$order->save();
好的。應(yīng)該是這個(gè)問(wèn)題,看來(lái)還是得仔細(xì)檢查?,F(xiàn)在想想,其實(shí)報(bào)錯(cuò)已經(jīng)很明顯在告訴是數(shù)據(jù)異常了。