Codeigniter ActiveRecord和this-> db->查询冲突

问题描述:

我在混合$ this-> db-> where()和$ this-> db-> query()时遇到了一个奇怪的现象。Codeigniter ActiveRecord和this-> db->查询冲突

if (!empty($args) && is_array($args)) { 
    foreach ($args as $key => $value) { 
     $this->db->where_in($field, $value); 
    } 
} 
$result = $this->db->query('SELECT * FROM ...')->result_array(); 

虽然我能理解它可能是最好不要混用的ActiveRecord和定期查询,我遇到了WHERE子句我建立了$this->db->where_in()是影响后续查询(即该条款上一个查询执行) 。

我的所有查询都应该重写为不使用ActiveRecord,还是只使用ActiveRecord?或者有没有办法来防止这种“冲突”?我想过$ ths-> db-> flush_cache(),但我没有使用数据库缓存,并且使用它似乎没有任何作用。

我建议不要在循环中调用db->where_in。考虑改为

if (!empty($args) && is_array($args)) 
{ 
    foreach ($args as $key => $value) 
    { 
     $values[] = $value; 
    } 
    $this->db->where_in($field, $values); 
} 

事实上,如果$ args是索引(而不是关联)数组,则不需要循环。你可以简单地删除foreach和使用

$this->db->where_in($field, $args); 

你可能不应该混查询生成器(以前称为活动记录)和db->query()。查询生成器(QB)方法基本上组装一个您将提供给db->query()的语句,然后几乎直接调用query("The statement that QB built")

IMO,键入查询语句并在$this->db->query("Select * from ...");中使用它几乎总是比较容易。查询生成器很好,但通常更值得工作。

在你的例子中,你应该坚持Query Builder。这仍然可以非常简洁。如果你正在寻找一个表中的所有领域,那么db->get将完成这项工作。

$result = $this->db->get('table_name')->result_array(); 

通常QB清除当与获取,插入或更新调用执行该语句要插入语句创建的所有各种元素。通过此次通话,您可以随时重新开始。

$this->db->reset_query();