如何使用Laravel 4.2在单个查询中进行批量插入或更新(而不是for循环查询)

rot*_*rcz 14 php mysql fluent laravel eloquent

$cardQueryList = [];
foreach($cards as $cardName => $quantity) {
    $cardQueryList[] = [
        'username' => $user->username,
        'card_uid' => $card->uid,
        'have_quantity' => $quantity
    ];
}

Collection::insert($cardQueryList);
Run Code Online (Sandbox Code Playgroud)

即使行存在,上面的代码也会创建新行.如果行存在,我该怎么做才会更新.如果没有它会创建行?一个雄辩或流利的答案将是最佳的,但如果没有别的办法,我会对原始开放.

我想用单个查询进行批量更新/插入.不是每个记录的for循环查询.理想情况下,出于显而易见的原因,我想打一次数据库.

我也已经检查了以下链接:

如果不存在则插入新记录,如果存在则更新,laravel eloquent

以上工作适用于单个记录更新/插入.如果我使用for循环运行会非常慢.我正在寻找一个允许在单个查询中进行批量插入/更新的答案.

注意:我正在使用'username'和'card_uid'作为我的密钥.所以基本上当我找到一个带有所述用户名和card_uid的行时,我想更新相应的行.否则创建一个新行.

Ram*_*der 5

通常,您将使用的 sql 类型将类似于以下内容:-

    insert into `TABLE` ( `FIELD1`,`FIELD2`, `FIELD3` ) values ( 'VALUE1','VALUE2','VALUE3' )
    on duplicate key
        update
            `FIELD1`='VALUE1',
            `FIELD2`='VALUE2',
            `FIELD1`='VALUE3';
Run Code Online (Sandbox Code Playgroud)

我无法告诉你你将如何在 Laravel 中使用它!糟糕 - 忘记了更新部分中的字段名称


Sie*_*bah 0

如果您不想重复,请让数据库架构阻止重复条目的输入。在这种情况下捕获错误并继续。