gpt4 book ai didi

php - SQLite 和 MySQL 的重复列增量

转载 作者:行者123 更新时间:2023-11-29 09:32:27 24 4
gpt4 key购买 nike

我有一个表 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com