我需要获取查询的行数(因此我可以对结果进行分页)。
当我正在学习codeigniter(和OO php)时,我想尝试将一个 - > num_rows()链接到查询,但它不起作用:
//this works:
$data['count'] = count($this->events->findEvents($data['date'], $data['keyword']));
//the following doesn't work and generates
// Fatal Error: Call to a member function num_rows() on a non-object
$data['count2'] = $this->events->findEvents($data['date'], $data['keyword'])->num_rows();
模型返回一个对象数组,我认为这就是为什么我不能在它上面使用方法的原因。
function findEvents($date, $keyword, $limit = NULL, $offset = NULL)
{
$data = array();
$this->db->select('events.*, venues.*, events.venue AS venue_id');
$this->db->join('venues', 'events.venue = venues.id');
if ($date)
{
$this->db->where('date', $date);
}
if ($keyword)
{
$this->db->like('events.description', $keyword);
$this->db->or_like('venues.description', $keyword);
$this->db->or_like('band', $keyword);
$this->db->or_like('venues.venue', $keyword);
$this->db->or_like('genre', $keyword);
}
$this->db->order_by('date', 'DESC');
$this->db->order_by('events.priority', 'DESC');
$this->db->limit($limit, $offset); //for pagination purposes
$Q = $this->db->get('events');
if ($Q->num_rows() > 0)
{
foreach ($Q->result() as $row)
{
$data[] = $row;
}
}
$Q->free_result();
return $data;
}
我可以做些什么来使用它吗? EG,而不是$ data [] = $ row;我应该使用另一种(OO)语法?
答案 0 :(得分:1)
你的函数findEvents返回你在开始时声明为数组的$ data。这不是对象,不允许您使用成员访问语法访问函数。
要计算数组中值的数量,请参阅count
另外,根据我的理解,您不仅希望将查询结果作为数组返回,而且您希望能够访问结果上的方法$ Q = $ this-> db-> get('events' );但是这是不可能的,因为这是一个局部变量,并且它没有被退回。这里的函数有一个结果类型的数组,不是一个对象,因此无法访问任何东西,但是数组。解决此问题的一种方法是返回一个关联数组:
return array("results" => $data, "count" => $Q->num_rows());
然后使用数组语法访问计数或结果。另一个选择是返回一个具有结果和计数字段的新对象,并使用访问器方法来获取这些字段。