首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP 3.0:如何在重复的密钥更新上执行插入?

CakePHP 3.0:如何在重复的密钥更新上执行插入?
EN

Stack Overflow用户
提问于 2014-07-21 01:11:24
回答 2查看 2.5K关注 0票数 7

我有一个这样的数组$articles

代码语言:javascript
复制
[
    (int) 0 => [
        'id' => '-@940039',
        'xe_dsca' => 'ÜP2768G/1',
        'xe_citg' => '1F0200',
        'xe_cuni' => 'stk',
        'xe_seak' => 'ÜP2768G/1',
        'xe_seab' => '',
        'xe_wght' => '0.0153',
        'xe_cwun' => 'kg',
        'xe_wgap' => '2',
        'xe_seri' => '2',
        'xe_ltct' => '2',
        'xe_qual' => '2',
        'xe_hama' => '2',
        'xe_ctyo' => 'DE',
        'xe_ccde' => '85045095',
        'xe_cpln' => '240000',
        'xe_spar' => '2',
        'xe_wear' => '2',
        'xe_ctyo_de' => null,
        'xe_cean' => null,
        'xe_ewm_dsce' => null,
        'xe_cood' => null,
        'xe_ewm_dsne' => null,
        'xe_ewm_dsge' => null,
        'xe_ewm_dsen' => null,
        'xe_ewm_dscz' => null,
        'xe_wgh1' => null,
        'xe_wgh2' => null,
        'xe_wgh3' => null
    ],
    (int) 1 => [
        'id' => '000-000500-00000',
        'xe_dsca' => 'DUMMY ZEITBUCHUNG',
        'xe_citg' => '1F0800',
        'xe_cuni' => 'stk',
        'xe_seak' => 'DUMMY ZEITBUCHUN',
        'xe_seab' => '000-000500-00000',
        'xe_wght' => '0',
        'xe_cwun' => 'kg',
        'xe_wgap' => '2',
        'xe_seri' => '2',
        'xe_ltct' => '2',
        'xe_qual' => '2',
        'xe_hama' => '2',
        'xe_ccde' => '000',
        'xe_cpln' => '930000',
        'xe_spar' => '2',
        'xe_wear' => '2',
        'xe_ctyo' => null,
        'xe_ctyo_de' => null,
        'xe_cean' => null,
        'xe_ewm_dsce' => null,
        'xe_cood' => null,
        'xe_ewm_dsne' => null,
        'xe_ewm_dsge' => null,
        'xe_ewm_dsen' => null,
        'xe_ewm_dscz' => null,
        'xe_wgh1' => null,
        'xe_wgh2' => null,
        'xe_wgh3' => null
    ]

在我的控制器中,我有以下几行

代码语言:javascript
复制
foreach ($articles AS $article) {
    $query = $this->Articles->query();
    $query
        ->insert($required_article_fields)
        ->values($article)
        ->execute();
}

这段代码运行得很好,但是有没有人给我一个建议,如何在重复的键更新上进行插入?一次保存多行数据的最佳实践是什么?

EN

回答 2

Stack Overflow用户

发布于 2014-07-28 16:10:26

您可以使用query epilog()方法

代码语言:javascript
复制
foreach ($articles AS $article) {
  $query = $this->Articles->query();
  $query
    ->insert($required_article_fields)
    ->values($article)
    ->epilog('ON DUPLICATE KEY UPDATE field=field+1')
    ->execute();
}

如果需要安全地传递值,还可以将QueryExpression对象传递给该方法。

票数 16
EN

Stack Overflow用户

发布于 2014-10-28 01:29:20

根据https://stackoverflow.com/a/26590483/80353的建议

你可以做到

代码语言:javascript
复制
$query = $this->Articles->query();
$query->insert($required_article_fields);


// need to run clause('values') AFTER insert()
$valuesExpression = $query->clause('values')->values($articles);

$query->values($valuesExpression)
      ->epilog('ON DUPLICATE KEY UPDATE `field1`=VALUES(`field1`) ... ')
      ->execute();

我没有填写您要更新的所有字段,因为我不知道哪个字段是您的唯一索引的一部分。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24852904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档