2013-04-29 2 views
0

다른 모델 (CodeIgniter & get_instance 사용)에서 모델을 호출하면 원하지 않는 동작이 발생하고 제약 조건이 $ this-> db-> where() 및 $ this-> db-> select() 이전 모델은 다음 모델로 이동합니다.Codeigniter 활성 레코드가 호출 후 재설정되지 않는 경우 여러 모델

우리는 모델을 다른 (연쇄/의존성) 모델로 호출해야하는 시나리오에서 작업하고 있습니다.하지만 CodeIgniter 커뮤니티에서는 일반적인 관행으로 보이지 않습니다.

아래에 세운 내용이 자세히 설명되어 있습니다.

/Application/models/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); 
    } 

} 

그리고 여기에 우리가 의존이, /application/models/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(); 

에게 새 쿼리를 실행하려고 할 때는 수행 : 그것은 여기 설명대로

+0

귀하의 경우에는 활성 레코드 체인이 발생했습니다. 각 쿼리 후 free_result() 함수를 사용해보십시오 –

+0

시도하고 작동하지 않았습니다 – Arthur

답변

1

는이 연속 질의를 할 수있는 캐시를 플러시해야 :

$this->db->flush_cache(); 

다음과 같은 새로운 검색어를 제공 할 예정입니다. 작업.

희망이 있습니다.

+0

이 내 문제를 해결, 감사합니다! – Arthur

관련 문제