Yii2: JSONB UPDATE ERROR

Created on 19 Feb 2018  路  4Comments  路  Source: yiisoft/yii2

What steps will reproduce the problem?

I am trying to update JSONB data column in the Postgres database using ActiveRecord.

What is the expected result?

I expect success on update

What do you get instead?

{
    "name": "Database Exception",
    "message": "Object of class yii\\db\\JsonExpression could not be converted to string\nFailed to prepare SQL: UPDATE \"crm\".\"deal\" SET \"search_query\"=:qp0, \"updated_at\"=:qp1 WHERE \"id\"=:qp2",
    "code": 4096,
    "type": "yii\\db\\Exception",
    "file": "/home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/Command.php",
    "line": 264,
    "stack-trace": [
        "#0 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/Command.php(1067): yii\\db\\Command->prepare(false)",
        "#1 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/ActiveRecord.php(247): yii\\db\\Command->execute()",
        "#2 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/BaseActiveRecord.php(801): yii\\db\\ActiveRecord::updateAll(Array, Array)",
        "#3 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/ActiveRecord.php(591): yii\\db\\BaseActiveRecord->updateInternal(NULL)",
        "#4 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/BaseActiveRecord.php(672): yii\\db\\ActiveRecord->update(true, NULL)",
        "#5 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/rest/UpdateAction.php(48): yii\\db\\BaseActiveRecord->save()",
        "#6 [internal function]: yii\\rest\\UpdateAction->run('47135')",
        "#7 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Action.php(94): call_user_func_array(Array, Array)",
        "#8 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\Action->runWithParams(Array)",
        "#9 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('update', Array)",
        "#10 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('crm/deal/update', Array)",
        "#11 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest(Object(yii\\web\\Request))",
        "#12 /home/borodulin/projects/roomberry/api/web/index.php(18): yii\\base\\Application->run()",
        "#13 {main}"
    ],
    "error-info": null,
    "previous": {
        "name": "PHP Recoverable Error",
        "message": "Object of class yii\\db\\JsonExpression could not be converted to string",
        "code": 4096,
        "type": "yii\\base\\ErrorException",
        "file": "/home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/Command.php",
        "line": 316,
        "stack-trace": [
            "#0 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/Command.php(260): yii\\db\\Command->bindPendingParams()",
            "#1 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/Command.php(1067): yii\\db\\Command->prepare('???')",
            "#2 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/ActiveRecord.php(247): yii\\db\\Command->execute()",
            "#3 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/BaseActiveRecord.php(801): yii\\db\\ActiveRecord::updateAll('???', '???', '???')",
            "#4 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/ActiveRecord.php(591): yii\\db\\BaseActiveRecord->updateInternal('???')",
            "#5 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/db/BaseActiveRecord.php(672): yii\\db\\ActiveRecord->update('???', '???')",
            "#6 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/rest/UpdateAction.php(48): yii\\db\\BaseActiveRecord->save('???', '???')",
            "#7 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Action.php(94): yii\\rest\\UpdateAction->run('???')",
            "#8 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Action.php(94): ::call_user_func_array:{/home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Action.php:94}('???', '???')",
            "#9 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Controller.php(157): yii\\base\\Action->runWithParams('???')",
            "#10 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Module.php(528): yii\\base\\Controller->runAction('???', '???')",
            "#11 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/web/Application.php(103): yii\\base\\Module->runAction('???', '???')",
            "#12 /home/borodulin/projects/roomberry/vendor/yiisoft/yii2/base/Application.php(386): yii\\web\\Application->handleRequest('???')",
            "#13 /home/borodulin/projects/roomberry/api/web/index.php(18): yii\\base\\Application->run()",
            "#14 {main}"
        ]
    }
}

Additional info

| Q | A
| ---------------- | ---
| Yii version | 2.0.14
| PHP version | 7.0
| Operating system | Ubuntu 16.04 LTS

PostgreSQL bug

All 4 comments

@samdark perhaps JsonExpression::__toString() solves this problem.

Please, post some code to reproduce the problem

Maybe a duplicate of #15684

Was this page helpful?
0 / 5 - 0 ratings

Related issues

MUTOgen picture MUTOgen  路  3Comments

indicalabs picture indicalabs  路  3Comments

psfpro picture psfpro  路  3Comments

nokimaro picture nokimaro  路  3Comments

Locustv2 picture Locustv2  路  3Comments