【发布时间】:2020-03-27 02:18:51
【问题描述】:
我有一张表将一些记录存储为 JSON。我正在尝试从 JSON 列中增加键的数值。下面是我在 Laravel 中使用 DB 外观执行的查询。
DB::connection()
->select("
SELECT CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) INTO @tmp
FROM subscriptions
WHERE `id` = '2';
UPDATE subscriptions
SET consumed = JSON_SET(consumed, '$.max_users', @tmp+1)
WHERE `id` = '2';
");
它在 PhpMyAdmin 中运行良好,但是当尝试从 Laravel 执行它时会引发异常,即 SQL 语法不正确(哪里不正确?)。
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'UPDATE subscriptions SET consumed = JSON_SET(consumed, '$.max_users', ' at line 5 (SQL: SELECT CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) INTO @tmp FROM subscriptions WHEREid= '2'; UPDATE subscriptions SET consumed = JSON_SET(consumed, '$.max_users', @tmp+1) WHEREid= '2'; )
我怀疑select() 不允许同时运行两个不同的查询。但是在这种特殊情况下,我需要它们以便使用 @tmp 变量。我可以使用 PHP 检索第一个查询的值并将其传递给第二个查询,但为了论证,如何在 Laravel 中一次运行两个 DB 选择? ????
【问题讨论】:
-
您不能在
select()方法中运行UPDATE查询。将它们连接在一起并将其作为单个更新查询运行。 -
@Qirel 您实际上可以在
select()中运行您想要的任何单个查询,只是没有要返回的结果集,所以它没有多大意义
标签: php mysql laravel select laravel-query-builder