2014-07-20 4 views
6

मैं एक सरणी $articles इसकेकपीएचपी 3.0: डुप्लिकेट कुंजी अपडेट पर डालने के लिए कैसे करें?

[ 
    (int) 0 => [ 
     'id' => '[email protected]', 
     '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 
    ] 

मेरी नियंत्रक में की तरह है मैं इन पंक्तियों

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

इस कोड को ठीक काम करता है, लेकिन किसी को भी मेरे लिए एक सुझाव कैसे नकली चाबी पर एक डालने करना है अद्यतन करें? और डेटा की कई पंक्तियों को एक बार में सहेजने का सबसे अच्छा अभ्यास क्या है?

उत्तर

15

आप क्वेरी 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 वस्तु पारित कर सकते हैं, तो आप सुरक्षित रूप से मान पास करने की जरूरत है।

4

द्वारा https://stackoverflow.com/a/26590483/80353

सुझाव के रूप में आप कर

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

मैं सभी क्षेत्रों से आपको अवगत करवाने क्योंकि मैं नहीं जानता कि जो क्षेत्र अपने अद्वितीय सूचकांक का हिस्सा है चाहता हूँ में भर नहीं था सकता है।

संबंधित मुद्दे