当我在codeigniter中调用行时我是否使用限制?

时间:2017-06-16 19:06:41

标签: php codeigniter activerecord phpactiverecord

我在遗留系统中工作,该系统使用row()和limit()来获得一个结果。我不明白为什么,因为row()已经给了我一个结果,但同事说这可以提高性能。例如:

    $this->db
         ->select()
         ->select('extract(epoch from cadevolucao.dt_sistema) as data_sistema')
         ->select('extract(epoch from cadevolucao.dt_previsao_alta) as data_previsao')
         ->select('cadevolucao.cd_evolucao, cadevolucao.dt_sistema')
         ->join('contatnd', 'cadevolucao.num_atend = contatnd.num_atend')
         ->join('cadplanejamento', 'cadevolucao.cd_evolucao = cadplanejamento.cd_evolucao')
         ->where('contatnd.cd_pessoa', $cd_pessoa)
         ->where('tp_evolucao', -1)
         ->where('tipo', 1)
         ->order_by('cadevolucao.cd_evolucao','desc')
         ->limit(3)
         ->get('cadevolucao')
          ->row();

我在CI文档和Google中查找过,没有找到任何有用的内容。

在Active Record的CI中使用row()时,有人可以解释是否需要限制()?为什么?

1 个答案:

答案 0 :(得分:4)

根据我所知道的row方法返回单个结果行。如果您的查询有多行,则只返回第一行。但在内部,它仍然获取查询提取的所有行并将其存储在数组中。是的我认为我必须同意你的同事确实限制会对性能产生影响。

这是row方法在内部执行的操作

/**
     * Returns a single result row - object version
     *
     * @param   int $n
     * @return  object
     */
    public function row_object($n = 0)
    {
        $result = $this->result_object();
        if (count($result) === 0)
        {
            return NULL;
        }
        if ($n !== $this->current_row && isset($result[$n]))
        {
            $this->current_row = $n;
        }
        return $result[$this->current_row];
    }

因为它返回第一个元素或提供的参数,即行索引。 row实际上是此row_object

的别名