Laravel DB 运行 一次两个查询 (SELECT/UPDATE)

Laravel DB run two queries at once (SELECT/UPDATE)

我有一个 table,它将一些记录存储为 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 将其传递给第二个查询,但是为了论证,如何 运行 在 [=31= 中一次选择两个 DB ]?

您可以使用单个更新查询来增加此值:

UPDATE subscriptions  
    SET consumed = JSON_SET(consumed, '$.max_users', CAST(JSON_EXTRACT(consumed, '$.max_users') AS INT) + 1)
    WHERE `id` = '2';