CakePHP 3.0:如何在重复键更新上插入? [英] CakePHP 3.0: How to do an insert on duplicate key update?

查看:111
本文介绍了CakePHP 3.0:如何在重复键更新上插入?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数组 $ articles 像这样

[
    (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
    ]

在我的控制器中,我有这些行

In my Controller I have these lines

foreach ($articles AS $article) {
    $query = $this->Articles->query();
    $query
        ->insert($required_article_fields)
        ->values($article)
        ->execute();
}

此代码可以正常工作,但任何人都有建议我如何做插入重复键更新?

This code works fine, but has anyone a suggestion for me how to do an insert on duplicate key update? And what is the best practice to save many rows of data at once?

推荐答案

您可以使用查询 epilog()方法

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对象传递给方法值。

you can also pass a QueryExpression object to the method if you need to safely pass values.

这篇关于CakePHP 3.0:如何在重复键更新上插入?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆