编码器活动记录呼叫后未复位,多个型号


Codeigniter active record not reseting after call, multiple models

当我从另一个模型调用模型时(使用CodeIgniter &get_instance),有一个不想要的行为,传递给$this->db->where()和$this->db->select()的约束前一个模型移动到下一个模型。

我正在研究一个场景,我们需要调用一个模型到另一个(链接/依赖)-尽管在CodeIgniter社区中似乎不是一种常见的做法。

下面我详细说明了我的计划。

/应用程序/模型/data_access/produto/produto_dao.php:

class Produto_dao extends CI_Model
{
    private $ci;
    public function __construct()
    {
        parent::__construct();
        $this->ci =& get_instance();
        $this->dependenciesEntity();
    }
    private function dependenciesEntity()
    {
        $this->ci->load->model('entity/produto/produto');
        $this->ci->load->model('entity/produto/produto_collection');
        $this->ci->load->model('data_access/produto/categoria_dao');
    }
    public function getProdutos($filtros, $inicioPaginacao = 0)
    {
        $this->db->select('produtos.id');
        $this->db->select('produtos.uri');
        $this->db->select('produtos.seo_keywords AS keywords');
            $this->db->where('produtos.id', '1349');
        $result = $this->db->get('produtos');
            var_dump( $this->db->last_query() );
        return $this->collectResult($result->result());
    }
    private function collectResult($result)
    {
        $produtoCollection = new Produto_collection();
        foreach($result as $value){
            $produto = new Produto();
            $produto->setId($value->id);
            $produto->setCategoria( $this->getCategoria( $value->id ) );
            $produto->setUri($value->uri);
            $produto->setKeywords($value->keywords);
            $produtoCollection->addProduto($produto);
        }
        return $produtoCollection;
    }
    private function getCategoria($idProduto)
    {
        $categoria = new Categoria_dao();
        return $categoria->getCategoria($idProduto);
    }
}

这里我们有依赖性,/应用程序/模型/data_access/produto/categoria_dao.php

class Categoria_dao extends CI_Model
{
    private $ci;
    public function __construct()
    {
        parent::__construct();
        $this->ci =& get_instance();
        $this->dependenciesEntity();
    }
    private function dependenciesEntity()
    {
        $this->ci->load->model('entity/produto/categoria');
        $this->ci->load->model('entity/produto/categoria_collection');
    }
    public function getCategoria($id)
    {
        $this->db->select('categorias.id');
        $this->db->select('categorias.id_pai AS idPai');
        $this->db->where('categorias.id',$id);
        $result = $this->db->get('categorias');
                var_dump( $this->db->last_query() );
        return $this->collectResult($result->result());
    }
    private function collectResult($result)
    {
        $categorias = new Categoria_collection();
        foreach($result as $value){
            $categoria = new Categoria();
                $categoria->setId($value->id);
            $categoria->setCategoriaPai( $this->getCategoriaPai( $value->idPai ) );
            $categorias->addCategoria($categoria);
        }
        return $categorias;
    }
    private function getCategoriaPai($id)
    {
        if($id){
          return $this->getCategoria($id);
     }
     return new Categoria_collection();
    }   
}

当我运行时,我得到以下结果$this->db->last_query()

Produto_dao.php last_query ()

SELECT produtos.id, produtos.uri, produtos.seo_keywords AS keywords FROM produtos WHERE produtos.id = '3454'

Categoria_dao.php last_query ()

SELECT produtos.id, produtos.uri, produtos.seo_keywords AS keywords, categorias.id, categorias.id_pai AS idPai FROM categorias WHERE categorias.id = '39' AND produtos.id = '3454'

知道为什么会这样吗?

您必须刷新缓存才能执行此连续查询,如下所示:

CodeIgniter: Active recode caching

第一次查询

$this->db->start_cache();
$this->db->select('field1');
$this->db->stop_cache();

当你要执行一个新的查询时,执行:

$this->db->flush_cache();

它会给你一个全新的查询。

希望能有所帮助。