por Sândler

CAKEPHP – Criando conditions no paginate com outras tabelas

janeiro 11, 2016 em CakePhp, Php por Sândler

 

Montando um Paginate com conditions em todas as tabelas

$this->paginate = array(
‘fields’=>’Financeiro.*,Aluno.*,Usuario.*’,
‘conditions’ => $condition,
‘joins’=>array(
array( ‘table’ => ‘aluno’,
‘alias’ => ‘Aluno’,
‘type’ => ‘LEFT’,
‘conditions’ => array(‘Financeiro.aluno_id = Aluno.id’)
),
array( ‘table’ => ‘usuario’,
‘alias’ => ‘Usuario’,
‘type’ => ‘LEFT’,
‘conditions’ => array(‘Aluno.usuario_id = Usuario.id’)
)
),
// ‘contain’ => array(‘Aluno’ ,’Usuario’),
// ‘link’ => array(‘Financeiro’ => array(‘Aluno’ => ‘Usuario’)),
‘limit’ => 30,
‘order’ => array(‘id’ => ‘DESC’)
);

por Sândler

CakePHP – Criando Concat no find list

agosto 23, 2015 em CakePhp, Php por Sândler

Adicione na model:

public $virtualFields = array(‘nome_tipo‘ => ‘CONCAT(nome, ” (“, tipo,”)”)’);

 

Na controller faça a busca com o nome virtual que criou na modelo:

$tagsArr = $this->Tag->find(‘list’,array(‘fields’=>’nome_tipo‘, ‘recursive’=>-1));

por Sândler

Adicionando as colunas direto no find tanto para tabela, belongsTo ou hasMany com bindModel

abril 7, 2015 em CakePhp por Sândler

As perguntas mais comuns é como faço para restringir a quantidade de colunas que traz na minha busca de uma tabela específica.

Exemplo de Tabelas:

Pagina – id, nome, data_cadastro
Promocao – id, id_pagina, nome, valor, data_cadastro
PromocaoConteudo – id, id_promocao, conteudo, data_cadastro

 

Então quando buscar a promoção teremos:

belongsTo = ‘Pagina’;
hasMany = ‘PromocaoConteudo’;

 

Estes exemplos abaixo, imaginamos que as tabelas já estão vinculadas na Model.

 

Trazendo tudo de tudo:
$promocoes = $this->Promocao->find(‘all’);

 

Vamos imaginar que queira somente algumas colunas de cada tabela que esteja vinculada a Promoção.

$this->Promocao->bindModel(array(‘hasMany’=>array(‘PromocaoConteudo’=>array(‘fields’=>array(‘PromocaoConteudo.conteudo’)))));
$promocoes = $this->Promocao->find(‘all’, array(‘fields’=>array(‘Promocao.nome’,’Promocao.valor’,’Pagina.nome’)));

 

Veja que quando é um BelongsTo é possível colocar nos fields do próprio find da promoção, mas quando é um HasMany, é necessário colocar com o bind como se fosse fazer o vínculo novamente.

 

 

 

por Sândler

Debug Query Cakephp via Controller e View

março 10, 2015 em CakePhp por Sândler

Podemos fazer dois tipos de Debug das queries executadas:

 

Controller –  irá retornar um array  com todas as queries que estão rodando:
Exemplo 1:
$destinos = $this->Destino->find(‘all’);
$log = $this->Destino->getDataSource()->getLog(false, false);
debug($log);

 

View  - também exibirá as queries que estão rodando, mas com visual em tabela para separar melhor o conteúdo:
Exemplo 2:

<?php echo $this->element(‘sql_dump’);?>

por Sândler

Desvincular Foreignkey (fk) model cakephp (unbindmodel)

março 9, 2015 em CakePhp, Php por Sândler

Desvinculando Foreignkey (de uma model com a outra via “unbindModel”.

 

Imaginando que na sua model “USERS” você tenha um hasMany de outras duas models chamadas “PROFILES” e “CONTACTS”.

Tendo estas informações podemos concluir que quando eu fizer uma busca de um ou mais usuários ele trará as informações do perfil e do contato.

Exemplo 1: Todos contatos / todos perfis / todos contatos

$this->User->find(‘all’);

 

Exemplo 2: Todos contatos / nenhum perfis / nenhum  contatos

$this->User->find(‘all’, array(‘recursive’=> -1));

 

Exemplo 3: Todos contatosnenhum perfis / todos contatos
Dependendo do vínculo entre as tabelas, você poderá utilizar “hasMany” ou “belongsTo” dependendo da forma que foi criada seu banco de dados.

$this->User->unbindModel(array(‘hasMany’ => array(‘Profile’)));
ou
$this->User->unbindModel(array(‘belongsTo’ => array(‘Profile’)));

$this->User->find(‘all’);