对于初学者来说,update_batch上的Codeigniter文档并不存在。kenjis很好心地提供了一些文档并将其提交给仓库。希望他们很快就能把它拉出来。
有人知道如何向Codeigniters update_batch命令添加多个where条件吗?
我的预期用途:
$where = array(
'title',
'name'
);
$this->db->update_batch('mytable', $data, $where);
当我尝试这个代码时,我得到了以下错误:
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
通过kenjis更新批文件:
$this->db->update_batch();
根据您提供的数据产生更新字串,并执行查询。您可以将数组或对象传递给函数。以下是使用数组的范例:
$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')
第一个参数将包含表名,第二个参数是值的关联数组,第三个参数是where键。
4条答案
按热度按时间wb1gzix01#
你不能在
update_batch()
中添加多个where子句,它只接受一个字符串作为where子句的第三个参数,所以我确信目前编写方法的方式无法做到这一点。从source:
slsn1g292#
我正在使用codeigniter 3.1.5,也遇到了同样的问题,但我解决了我的问题如下:
产生它:
更新
我在尝试使用update_batch添加100条以上的记录时遇到问题,例如:
第一次呼叫(使用WHERE):
第二次呼叫(不含WHERE):
试试这个:
产品型号:
hrysbysz3#
update_batch
中的多个where条件被破坏,因为批处理循环中正在清除WHERE查询。下面是批更新循环:
请注意,
$this->qb_where = array();
会清除传递的WHERE条件。在CodeIgniter v3.1.10中,违规行位于
DB_query_builder.php
中的1940上。这会产生非常意外的行为,即WHERE条件对处理的第一批(默认值为100)有效,而对后续批无效。有两种可能的解决方案:
1.使用
update_batch
的第四个batch_size
参数并传递一个较大的数字(如100,000),以便在第一批中处理所有查询,并且不清除WHERE条件。1.更新违规行以还原初始WHERE条件。
解决方案2的代码:
希望这对你有帮助!
rpppsulh4#