【问题标题】:Code igniter - running two queries collideCodeigniter - 运行两个查询冲突
【发布时间】:2016-03-15 06:44:47
【问题描述】:

作为 CI 中非常大的活动记录查询的一部分,我需要从不同的模型中获取一些东西 - 例如:

$sql = $this->events_model->events_to_sql($val); //returns an sql
$this->db->where($sql, NULL, false);

现在“events_to_sql”运行一个不同的查询来获取它运行所需的一些数据,但它失败了,因为它使用了之前的活动记录“where”,第一个查询没有关闭。

$this->db->where("clients.email !=", '');

我如何告诉 CI:这是一个单独的查询。你应该只运行它吗?

*不,我不能先运行另一个查询,因为有多个相同的想法,我不希望每个案例都单独处理,而是以相同的方式处理。

*我知道我可以使用另一个数据库连接,但我宁愿使用单个连接。

编辑:

这是运行的:(按顺序)

//main model
$this->db->where("clients.email !=", '');
//Events to sql function
  //run seperate function
   $this->db->from('events');
   return $this->db->get();
return (string)$sql_built_from_the_event_stuff.

我得到的是“SELECT * FROM events WHERE clients.email != ''”而不是:“SELECT * FROM events”

【问题讨论】:

  • 你试过$this->db->close();events_to_sql结尾查询
  • 可以添加events_to_sql()的功能吗?
  • @Astro 这也会“破坏”我在运行函数之前设置的所有规则。
  • @SankarV 添加了动作发生的顺序和子功能(简化)
  • 如果你想要SELECT * FROM events,为什么要使用它,$this->db->where("clients.email !=", ''); 或者只是添加一个条件来分隔查询,例如if(condition){$this->db->where("clients.email !=", ''); }@Amit

标签: php codeigniter activerecord


【解决方案1】:

使用参数来分隔查询, 示例:

$separate = 1;
$sql = $this->events_model->events_to_sql($val,$separate); //returns an sql
$this->db->where($sql, NULL, false);

模型 events_to_sql,

public function events_to_sql($val, $queryselector = false){
   .....
   .....
if($queryselector != 1){
   $this->db->where("clients.email !=", '');
}
//Events to sql function
  //run seperate function
   $this->db->from('events');
   return $this->db->get();
return (string)$sql_built_from_the_event_stuff.
}

【讨论】:

  • 我是从一个完全独立的模型中调用这个函数的,所以在这种情况下混合起来并不好。另外,我事先不知道查询的位置是什么——它不仅是 $this->db->where("clients.email !=", '');
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2021-01-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2012-04-28
相关资源
最近更新 更多