我尝试在模型中使用另一个模型的方法来访问数据,但它给了我错误,因为它与之前的 $this->db 参数混淆了:
$this->db->select('*');
$this->db->group_start();
$this->db->like('title', $keyword);
$this->db->or_like('keyword', $keyword);
$this->db->group_end();
$locations = $this->place_model->search_ids_by_name($location);
而Place_model的
search_ids_by_name()
是这样的:
public function search_ids_by_name($q) {
$this->db->select('id');
$this->db->like('name', $q);
$qry = $this->db->get('places');
$results = $qry->result_array();
$place_ids = array();
foreach ($results as $result) {
array_push($place_ids, $result['id']);
}
return $place_ids;
}
但是它给了我以下错误
错误号:1054,“where 子句”中的未知列“类别” 文件名:models/Place_model.php
在我的 place_model 函数中,似乎也使用了
like()
和 or_like()
方法。我怎样才能将它们分开?
我找到了解决办法。我又建立了一个连接:
public function search_ids_by_name($q) {
$places_db = $this->load->database('default', TRUE);
$places_db->select('id');
$places_db->like('name',$q);
$qry = $places_db->get('places');
$results = $qry->result_array();
$place_ids = array();
foreach ($results as $result) {
array_push($place_ids, $result['id']);
}
return $place_ids;
}
这就是“Active Record”的工作原理——您可以开始构建查询,然后转到其他地方并继续构建查询。
在您的代码中,初始查询构建不会执行,因此在构建新查询之前不会清除它 - 这就是第一个查询的各个方面渗透到外部模型方法的查询中的原因。
要解决此问题,只需提前移动
$locations = $this->place_model->search_ids_by_name($location);
,然后您就可以从头开始构建其他查询。
您的
search_ids_by_name()
方法可以如下所示:
public function getIdsByPartialNameMatch(string $term): array
{
return array_column(
$this->db->like('name', $q)->get('places')->result_array(),
'id'
);
}
我没有足够的信息来建议正在构建的其他查询,但在 CodeIgniter 中,您不需要编写
$this->db->select('*');
——这是默认的 SELECT 子句。