zec*_*hdc 15 activerecord codeigniter codeigniter-2
首先,update_batch上的Codeigniter文档不存在.kenjis非常友好地提供一些文档并将其提交到存储库.希望他们很快就拉下来.
有谁知道如何在Codeigniters update_batch命令中添加多个条件?
我想要的用途:
$where = array(
'title',
'name'
);
$this->db->update_batch('mytable', $data, $where);
Run Code Online (Sandbox Code Playgroud)
当我尝试这段代码时,我得到了以下错误:
A Database Error Occurred
One or more rows submitted for batch updating is missing the specified index.
Filename: C:\wamp\www\wheel\system\database\DB_active_rec.php
Line Number: 1451
Run Code Online (Sandbox Code Playgroud)
由kenjis更新批处理文档:
$this->db->update_batch();
Run Code Online (Sandbox Code Playgroud)
根据您提供的数据生成更新字符串,然后运行查询.您可以将数组或对象传递给函数.以下是使用数组的示例:
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
$this->db->update_batch('mytable', $data, 'title');
// Produces:
// UPDATE `mytable` SET `name` = CASE
// WHEN `title` = 'My title' THEN 'My Name 2'
// WHEN `title` = 'Another title' THEN 'Another Name 2'
// ELSE `name` END,
// `date` = CASE
// WHEN `title` = 'My title' THEN 'My date 2'
// WHEN `title` = 'Another title' THEN 'Another date 2'
// ELSE `date` END
// WHERE `title` IN ('My title','Another title')
Run Code Online (Sandbox Code Playgroud)
第一个参数将包含表名,第二个参数是值的关联数组,第三个参数是where键.
Chr*_*itz 18
您不能添加多个where子句update_batch().它只接受一个字符串作为where子句的第三个参数,所以我确信没有办法按照当前编写方法的方式执行此操作.
从来源:
/**
* Update_Batch
*
* Compiles an update string and runs the query
*
* @param string the table to retrieve the results from
* @param array an associative array of update values
* @param string the where key
* @return object
*/
public function update_batch($table = '', $set = NULL, $index = NULL)
Run Code Online (Sandbox Code Playgroud)
Rod*_*zim 10
我使用codeigniter 3.1.5并遇到了同样的问题,但我解决了我的问题如下:
$data = array(
array(
'title' => 'My title' ,
'name' => 'My Name 2' ,
'date' => 'My date 2'
),
array(
'title' => 'Another title' ,
'name' => 'Another Name 2' ,
'date' => 'Another date 2'
)
);
$this->db->where('name','My Name 2');
$this->db->update_batch('mytable', $data, 'title');
Run Code Online (Sandbox Code Playgroud)
产生它:
// Produces:
// UPDATE `mytable`
// SET `name` = CASE
// WHEN `title` = 'Another title' THEN 'Another Name 2'
// WHEN `title` = 'My title' THEN 'My Name 2'
// ELSE `name`
// END,
// `date` = CASE
// WHEN `title` = 'My title' THEN 'My date 2'
// WHEN `title` = 'Another title' THEN 'Another date 2'
// ELSE `date`
// END
// WHERE `title` IN ('My title','Another title')
// AND `name` = 'My Name 2'
Run Code Online (Sandbox Code Playgroud)
UPDATE
尝试使用update_batch添加超过100条记录时遇到问题,例如:
$data = [1=>a,2=>b ... 200=>zz];
Run Code Online (Sandbox Code Playgroud)
第一次调用(使用WHERE):
// Produces:
// UPDATE `mytable`
// SET `name` = CASE
// WHEN `title` = 'My title' THEN 'My Name 2'
// WHEN `title` = 'Another title' THEN 'Another Name 2'
// ELSE `name`
// END,
// `date` = CASE
// WHEN `title` = 'My title' THEN 'My date 2'
// WHEN `title` = 'Another title' THEN 'Another date 2'
// ELSE `date`
// END
// WHERE `title` IN ('My title','Another title')
// AND `name` = 'My Name 2'
Run Code Online (Sandbox Code Playgroud)
第二次调用(没有WHERE):
// Produces:
// UPDATE `mytable`
// SET `name` = CASE
// WHEN `title` = 'My title' THEN 'My Name 2'
// WHEN `title` = 'Another title' THEN 'Another Name 2'
// ELSE `name`
// END,
// `date` = CASE
// WHEN `title` = 'My title' THEN 'My date 2'
// WHEN `title` = 'Another title' THEN 'Another date 2'
// ELSE `date`
// END
// WHERE `title` IN ('My title','Another title')
Run Code Online (Sandbox Code Playgroud)
试试这个:
$chunk1 = array_chunk($data,100);
for($i=0;$i < count($chunk1);$i++) {
$this->upload_model->update_data($chunk1[$i],'My Name 2');
}
Run Code Online (Sandbox Code Playgroud)
模型:
public function update_data($data='',$name=''){
$this->db->where('name',$name);
$this->db->update_batch('mytable', $data, 'title');
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21889 次 |
| 最近记录: |