我需要从数据库中读取一些数据 我的控制器是
class Pro_ajax extends CI_Controller{
public function _construct() {
parent::_construct();
$this->load->model('ajax_model');
}
public function _remap($method,$param = array())
{
if ($method == 'user_search')
{
$this->user_search($param[0]);
}
}
private function user_search($text = '')
{
$result = $this->ajax_model->ajax_user_search($text);
$count = count($result);
$data = array();
for ($i = 0;$i < $count AND $i < 5;$i++)
{
$data[$i][0] = $result->id;
$data[$i][1] = $result->firstname.' '.$result->lastname;
}
echo (json_encode($data));
}
}
我的模型是:
class Ajax_model extends CI_Model{
public function __construct() {
parent::__construct();
}
public function ajax_user_search($text = '')
{
$this->db->flush_cache();
$this->db->limit(5);
$this->db->or_like('firstname',$text);
$this->db->or_like('lastname',$text);
$this->db->or_like('alias',$text);
$this->db->or_like('username',$text);
$query = $this->db->get('user_store_table');
var_dump($this->db->last_query());
return $query->result();
}
}
但它不起作用并回应:
A PHP Error was encountered
Severity: Notice
Message: Undefined property: Pro_ajax::$db
Filename: core/Model.php
Line Number: 50
问题出在哪里,我应该如何解决? 特别感谢您的关注
答案 0 :(得分:7)
我100%确定您没有在自动加载中添加数据库。
请转到您的配置文件夹,然后打开autoload.php并搜索有的行 $自动加载[ '库']。
添加:
$autoload['libraries'] = array('database');
或者你可以这样做:
class Ajax_model extends CI_Model{
public function __construct() {
parent::__construct();
$this->load->database();
}
}
希望这有帮助。
答案 1 :(得分:3)
看起来CI正在将$ this解释为控制器的实例而不是数据库对象...正如@AlphaMale巧妙地指出的那样,你有没有加载它?
class Ajax_model extends CI_Model{
public function __construct() {
parent::__construct();
$this->load->database(); //No, database doesn't autoload by default
//this is something which I strongly suggest to do in the config/autoload.php file..you're going to use it a lot in Models ;)
}
//..
}
此外,在控制器中自动加载模型可能被视为“不良做法”,因为即时加载(即使几乎可以忽略不计的数量)性能也会增加。 所以,我建议你把模块装到你需要的地方,即
private function user_search($text = '')
{
$this->load->model('ajax_model');
}
如果由于其他原因不使用它,请从控制器中删除alt_heter __construct()。