다른 모델 (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();
에게 새 쿼리를 실행하려고 할 때는 수행 : 그것은 여기 설명대로
귀하의 경우에는 활성 레코드 체인이 발생했습니다. 각 쿼리 후 free_result() 함수를 사용해보십시오 –
시도하고 작동하지 않았습니다 – Arthur