CakePHP 3.0: How do I paste when re-updating the key?

I have an array of $articles like this

 [ (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 does anyone have a suggestion about me on how to insert when duplicating a key update? And what's the best way to save multiple rows of data at once?

+6
source share
2 answers

You can use the epilog() method

 foreach ($articles AS $article) { $query = $this->Articles->query(); $query ->insert($required_article_fields) ->values($article) ->epilog('ON DUPLICATE KEY UPDATE field=field+1') ->execute(); } 

you can also pass a QueryExpression object to this method if you need to pass values โ€‹โ€‹safely.

+15
source

As suggested by fooobar.com/questions/972537 / ...

You can do

 $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(); 

I did not fill out all the fields that you want to update, because I do not know which field is part of your unique index.

+4
source

Source: https://habr.com/ru/post/972534/


All Articles