[英]Codeigniter update_batch increment value
如果我錯了,請糾正我,我正在嘗試更新多行,增加其值,據我所知,使用 update_batch() 不可能做到這一點,因為 CI 在使用 update_batch() 時總是會轉義值,是這樣嗎正確,或者如果有辦法,請詳細說明方式作為答案。 例如,我有這個數組:
$array = array(
array(
'product_id' => '1',
'value' => '5',
),
array(
'product_id' => '2',
'value' => '15'
)
);
現在我想通過將列值(INT)增加數組中的值來更新我的表,其中列 product_id = product_id 在數組中。
我現在正在做的是使用這樣的 set 循環
foreach($array as $a) {
$this->db->set('value' + $a['value'], FALSE);
$this->db->where('product_id', $a['product_id'];
$this->db->update('table');
}
但是有時我需要更新超過 10 行,我認為這個過程會很昂貴並且會占用大量內存,我如何進一步簡化這個方法以獲得相同的結果?
非常歡迎和感謝所有答案。 先感謝您。
您可以使用$this->db->update_batch();
一次更新多個記錄。 請參閱此codeigniter用戶指南以進行更新查詢。
對於 LARAVEL 有解決方案: https : //github.com/mavinoo/laravelBatch#example-increment--decrement
FOR CODEIGNITER 3/4:db_query_builder.php 中的第 1970 行。
//if field name in value and +,-,*,/,% in value then apply that to self field
$flag = TRUE;
$then = 'THEN ';
if(is_array($val[$field]['value']) && count($val[$field]['value']) == 2)
{
$first = str_replace("'", "", $val[$field]['value'][0]);
$second = str_replace("'", "", $val[$field]['value'][1]);
settype($first, "string");
settype($second, "string");
switch ($first) {
case "+":
$then .= $val[$field]['field'].' + ';
break;
case '-':
$then .= $val[$field]['field'].' - ';
break;
case "*":
$then .= $val[$field]['field'].' * ';
break;
case '/':
$then .= $val[$field]['field'].' / ';
break;
case '%':
$then .= $val[$field]['field'].' % ';
break;
default:
$flag = FALSE;
break;
}
if(is_numeric($second) && $flag == TRUE)
{
$then .= $val[$field]['value'][1];
}
}
else
{
$then = 'THEN '.$val[$field]['value'];
}
$final[$val[$field]['field']][] = 'WHEN '.$val[$index]['field'].' = '.$val[$index]['value'].' '.$then;
//$final[$val[$field]['field']][] = 'WHEN '.$val[$index]['field'].' = '.$val[$index]['value'].' THEN '.$val[$field]['value'];
$values[] = array('id','balance' => ['+',500]); //will increment.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.