Um modelo CakePhp pode mudar sua tabela sem ser reinstantada?
-
19-09-2019 - |
Pergunta
Estou trabalhando com um esquema imutável de banco de dados Legacy, onde cada instância de um objeto tem sua própria tabela no banco de dados com registros associados. Eu preciso mudar de modelo useTable
Toda vez que o modelo é instanciado, mas retém o belo cache do bolo e o que não.
Digamos que eu tenha muitos objetos de bloco, que cada um tem vários objetos de nota (nota pertence a Pad, pad na nota). Cada bloco tem um registro na tabela Pads, no entanto, todas as notas têm sua própria tabela em um banco de dados (digamos, intitulado 'pad_ {id}'). Este esquema é fixo e devo usá -lo.
No momento, não preciso economizar, então faço isso no modelo antes de encontrar para apoiar a leitura:
function beforeFind($query_data) {
if(empty($query_data['pad_id'])) {
return false;
} else {
$this->useTable = $query_data['pad_id'];
parent::__construct();
return $query_data;
}
}
Isso muda a tabela do modelo usada no banco de dados e funciona bem quando Core::debug > 0
. No entanto, quando é zero, acho que o CakePHP armazena em cache o código do modelo e não altera corretamente a tabela. De qualquer forma, recebo um erro 404 quando visito/blocos/view/{pad_id} ou qualquer ação altera dinamicamente esta tabela. Não consigo descobrir qual é o erro exato, porque funciona bem quando ligo a depuração. Portanto, quaisquer indicadores de depuração dessa questão também ajudariam.
Obrigado!
Solução
Você deve ser capaz de usar setSource()
Para alterar a tabela, o modelo está usando. $this->setSource('pad_x')
Definirá a tabela como 'PAD_X' e redefinirá o esquema do modelo. Referência da API
Outras dicas
Tentar var $persistModel = false;
no seu controlador ou no AppController.
Ver: http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-seedup-cakephp-apps/