【发布时间】:2015-10-16 04:03:38
【问题描述】:
$cardQueryList = [];
foreach($cards as $cardName => $quantity) {
$cardQueryList[] = [
'username' => $user->username,
'card_uid' => $card->uid,
'have_quantity' => $quantity
];
}
Collection::insert($cardQueryList);
即使行存在,上面的代码也会创建新行。我怎样才能做到这一点,如果该行存在,它会更新。如果它不创建行?一个雄辩或流利的答案是最佳的,但如果没有其他方法,我愿意接受。
我想使用单个查询进行大规模更新/插入。不是每条记录的查询循环。理想情况下,出于显而易见的原因,我想访问数据库一次。
我也已经查看了以下链接:
Insert a new record if not exist and update if exist, laravel eloquent
以上适用于单个记录更新/插入。如果我用 for 循环运行会很慢。我正在寻找一个允许在单个查询中进行大规模插入/更新的答案。
注意:我使用“username”和“card_uid”作为我的密钥。因此,基本上当我找到具有所述用户名和 card_uid 的行时,我想更新相应的行。否则创建一个新行。
【问题讨论】:
-
你知道如何用 raw-sql 做到这一点吗?不雄辩或查询构建器
-
@M0rtiis:这是个好问题。我需要一点时间才能弄清楚。 MySQL 不是我的强项。
-
@M0riis:感谢您的链接。我去看看。
-
@M0riis:我尝试通过 Eloquent 和/或 Fluent 的一个原因是因为 Laravel 会检查这些值是否有效,所以进行注入攻击要困难得多。
标签: php mysql laravel eloquent fluent