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

When I call row in codeigniter Am I using limits?

我在一个遗留系统中工作,该系统使用 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() 时是否需要 limit() 以及为什么?

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

这就是 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

的别名