php - SQLite 和 MySQL 的重复列增量

标签 php mysql sqlite laravel-5

我有一个表 ice_cream,其中包含两列:primary_key user_id 和 int counter,默认值为 0。

我想插入一个user_id,其counter值为1,并在重复时增加counter

我正在寻找适用于 MySQL 和 SQLite 的 Laravel Database Builder 5.6 版解决方案。

对于 MySQL 我有这个解决方案:

 IceCream::updateOrCreate([
                    'user_id' => $user_id,
    ],
    [
       'counter' =>  \DB::raw('counter + 1'),
    ]);

但是,这不适用于 SQLite。我收到以下错误消息:

Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1 no such column: counter (SQL: insert into "ice_cream" ("user_id", "counter") values (12,counter + 1))

对于 SQLite,我还有一个自定义解决方案:

\DB::select(\DB::raw('INSERT OR IGNORE INTO ice_cream (user_id,counter) VALUES (?,0) '), [$user_id]);
\DB::select(\DB::raw("UPDATE ice_cream SET counter = counter + 1 WHERE user_id= ?"), [$user_id]);

但是这不适用于 MySql。

自 Laravel v5.8.33 版本以来,有一个通用的 insertOrIgnore 方法,但我目前使用的是 Laravel v5.6,目前无法更新。

是否可以创建一种适用于两者的解决方案?

最佳答案

找到了一种同时适用于 MySQL 和 SQLite 的方法:

$iceCream = static::firstOrNew([
                'user_id' => $user_id,
            ], 
            ['counter' => 0]);

$iceCream->counter++;

$iceCream->save();

关于php - SQLite 和 MySQL 的重复列增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400987/

相关文章:

php - 如何将 Mediawiki 连接到自定义用户数据库?

php - 如何使登录页面 PHP 与 Session 一起工作。

mysql - 如何正确格式化此 MySQL JOIN 语句?

mysql - 如何在一个查询中获取当前ID的当前和以前的ID(mysql)

ios - 如何在 Objective-C 中将字符串插入到 sqlite?

javascript - jQuery 写入数据库 数据库

php - 如何管理 if - else 在这里..

php - 多重加入codeigniter

order by before group by 的 MySQL 查询性能改进

iphone - 需要 iOS 数据库云设计技巧