使用CodeIgniter Active Record语句

时间:2013-04-18 14:48:24

标签: mysql codeigniter activerecord

我正在寻找一种在CodeIgniter中使用Active Record来构建查询的方法。

我目前的代码是:

$this->db->   like('responsible', $user->id);
$this->db->or_like('accountable', $user->id);
$this->db->or_like('consulted',   $user->id);
$this->db->or_like('informed',    $user->id);

// Get the tasks, but only with the correct start or end date
$tasks = $this->db->get_where('level_' . $this->config->item('answer_level'), array('date_end' => $offset, 'ccode' => $user->country));

// Check if tasks exist
if($tasks->num_rows() > 0){
    // Tasks have been found that should have been finished!
    echo $tasks->num_rows() . " tasks found for " . $user->first_name . " that should have been finished!\n";
    $last_month_tasks = $tasks->result();
}

unset($tasks);

产生以下SQL:

SELECT *
FROM (`level_3`)
WHERE `date_start` =  -5
AND `ccode` =  'GB'
AND  `responsible`  LIKE '%5%'
OR  `accountable`  LIKE '%5%'
OR  `consulted`  LIKE '%5%'
OR  `informed`  LIKE '%5%' 

但我需要它来生成这个SQL:

SELECT * 
FROM (`level_3`)
WHERE  `date_start` = -5
AND  `ccode` =  'GB'
AND (
`responsible` LIKE  '%5%'
    OR  `accountable` LIKE  '%5%'
    OR  `consulted` LIKE  '%5%'
    OR  `informed` LIKE  '%5%'
)

1 个答案:

答案 0 :(得分:3)

CodeIgniter的ActiveRecord不支持嵌套查询和子句。 你必须像这样手动完成:

$this->db->select('*');
$this->db->from('level_' . $this->config->item('answer_level'));
$this->db->where(array('date_end' => $offset, 'ccode' => $user->country));
$this->db->where("(responsible LIKE '%5%' OR accountable LIKE '%5%' OR consulted LIKE '%5%' OR informed LIKE '%5%')");
$tasks = $this->db->get();