हाँ, Big_Data थोक डालने के लिए अच्छा विचार है की ओर इशारा किया। लेकिन AD7six नोट के रूप में, यह अभी भी मूल मूल्य उद्धरण का उपयोग करता है और डालने आईडी को वापस नहीं करता है। और आपके विचारों पर आधारित, मैंने डिफ़ॉल्ट केकपीएचपी उद्धरण और सम्मिलित रिकॉर्ड्स की आईडी को वापस करने के लिए, एक ही क्वेरी में थोक डालने के लिए छोटी लिपि लिखी।
$count = count($records);
$dbSource = $this->getDataSource();
$table = $dbSource->fullTableName($this->table);
$fields = $dbSource->prepareFields($this, array('fields' => array_keys($records[0])));
$values = array();
foreach ($records as $index => $record) {
if (!is_array($record) || !$record) {
return null;
}
foreach ($record as $column => $value) {
$values[$index][$column] = $dbSource->value($value, $this->getColumnType($column));
}
$values[$index] = '(' . implode(',', $values[$index]) . ')';
}
$query = 'INSERT INTO %s (%s) VALUES %s;';
$query = sprintf($query, $table, implode(',', $fields), implode(',', $values));
if (!$dbSource->execute($query)) {
return false;
}
$lastInsertId = $dbSource->getConnection()->lastInsertId();
$insertIds = array();
for ($i = 0; $i < $count; $i++) {
$insertIds[] = $lastInsertId + $i;
}
return $insertIds;
स्रोत
2015-03-17 10:27:21
सावधान =)। उस व्यवहार में एक (संभवतः) आसान एपीआई है, लेकिन कच्चे एसक्यूएल लिख रहा है। यदि आपका डेटा सरल नहीं है तो आपको एसक्यूएल सिंटैक्स त्रुटियां मिलेंगी - यह केवल मूल [मूल्य उद्धरण] (https://github.com/jmillerdesign/CakePHP_Big_Data/blob/master/Model/Behavior/BigDataBehavior.php# L146)। ऐसा लगता है कि यह आपको पूर्ण पंक्ति डालने/अपडेट को छोड़कर कुछ भी करने नहीं देता है।यदि आप इसे किसी भी तरह से उपयोग करना चाहते हैं तो मैं बस [insertMulti] को कॉल करने के लिए अद्यतन करने का सुझाव देता हूं (https://github.com/cakephp/cakephp/blob/master/lib/Cake/Model/Datasource/DboSource.php#L2894), अनचाहे कच्चा एसक्यूएल प्रश्न एक समस्या होने की प्रतीक्षा कर रहे हैं। – AD7six
टिप्पणी के लिए धन्यवाद। – systematical