【发布时间】:2012-06-17 15:54:52
【问题描述】:
我试图在同一模型中调用模型方法,但它没有按预期工作。这是我的课,有两种不起作用的方法
class mymodel extends CI_Model{
public function __construct(){
parent::__construct();
$this->tablea = 'tablea';
$this->tableb = 'tableb';
}
public function saveData($data){
$dataCopy['revisionkey'] = $this->getRevisionKey($data['id']);
//check and condition revision key to be int with +1 from last one
$this->db->insert($this->tableb, $dataCopy);
$this->db->where('id', $id);
return $this->db->update($this->user_table, $data) ? true : false;
}
public function getRevisionKey($id){
$this->db->select($this->revision_tablea.'.revisions_number as revisions_number')
->from($this->revision_tablea)
->where($this->revision_tablea.'.id', $id)
->order_by($this->revision_table.'.revisions_number', 'asc')
->limit(1);
$query = $this->db->get();
if ($query->num_rows() > 0){
return $query->row_array();
}else{
return 0;
}
}
}
现在方法 getRevisionKey() 应该产生如下查询
SELECT `tableb`.`revisions_number` as revisions_number FROM (`tableb`) WHERE `tableb`.`id` = '26' ORDER BY `tableb`.`revisions_number` asc LIMIT 1
但它会产生如下查询
SELECT `tableb`.`revisions_number` as revisions_number FROM (`tableb`) WHERE `id` = '26' AND `tableb`.`id` = '26' ORDER BY `tableb`.`revisions_number` asc LIMIT 1
这当然是由于在模型中调用了相同的方法,如果在模型之外使用此方法可以正常工作。这个问题有什么解决办法吗?
编辑
重写getRevisionKey() 解决了这个问题。这是新版本
public function getRevisionKey($id){
$sqlQuery = $this->db->select($this->revision_tablea.'.revisions_number as revisions_number')
->from($this->revision_tablea)
->order_by($this->revision_table.'.revisions_number', 'asc')
->limit(1);
$query = $sqlQuery->where($this->revision_tablea.'.id', $id)->get();
if ($query->num_rows() > 0){
return $query->row_array();
}else{
return 0;
}
}
【问题讨论】:
-
你在外部使用
getRevisionKey()吗?我的意思是来自任何控制器? -
在我看来,问题出在上述方法中的
$this->db->where('id', $id);,在我看来,除了下面正确的函数之外,它还添加了额外的参数。 -
@Aniket 我在控制器中使用它,并且正如预期的那样工作正常。
-
@MarioPeshev,你是对的。这个问题有什么解决办法吗?当然我可以做一些工作,但原来的问题仍然存在。
-
我猜你在发帖之前做了一些修改?因为在
getRevisionKey中你调用$this->revision_tablea但你定义$this->tablea并且你有order_by($this->revision_table.最后没有A 或B。我的意思是,我看不出有什么问题,但你有没有删掉一些可能导致问题的部分?
标签: php sql codeigniter query-builder