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();