Conhecimento nunca é demais
Utilizando o joinInner do Zend_Db_Table no Modelo
Vamos fazer uma consulta utilizando o o Zend_Db_Table:
<?php
class Usuarios extends Zend_Db_Table_Abstract
{
protected $_name = 'usuarios';
protected $_alias = 'user';
protected $_primary = 'id';
public function getUsuarios($where=array(), $limit=array())
{
$select = $this->select()
->setIntegrityCheck(false)
->from(array($this->_alias => $this->_name))
->joinInner(array(
'gru'=>'grupos'),
'gru.id = user.id_grupo',array(
'nome_grupo' => 'gru.nome'
)
);
if($where) {$select->where($where);}
if($limit) {$select->limitPage($limit[0],$limit[1]);}
return $this->fetchAll($select);
}
}
?>
ATENÇÃO: Sempre que você retornar algum resgistro dessa tabela de ligação é obrigatório setar o metodo ->setIntegrityCheck(false).
Qualquer dúvida comenta ai.
Grande abraço.
| Imprimir artigo | Este artigo foi escrito por Jhonny Makis em 28 de agosto de 2010 às 11:28, e está arquivado em Dicas, PHP, Zend Framework. Siga quaisquer respostas a este artigo através do RSS 2.0. Você pode deixar uma resposta ou fazer um trackback do seu próprio site. |
há 1 ano atrás
Tenho um exemplo simples que naum consigo resolver vamos lá
query;
$strQueryInfoPacientes = $objPacientes->select()
->distinct()
->from( array(‘P’ => ‘tabPacientes’ ))
->join( array( ‘C’ => ‘tabConvenio’ ), ‘P.con_cod = C.con_cod’, array())
->where(‘pac_status = ?’,’1′)->order(‘pac_nome ASC’);
echo $strQueryInfoPacientes->__toString();exit; // mostra query
// query criada
SELECT DISTINCT `P`.* FROM `tabPacientes` AS `P` INNER JOIN `tabConvenio` AS `C` ON P.con_cod = C.con_cod WHERE (pac_status = ’1′) ORDER BY `pac_nome` ASC
cara minha dúida é o seguinte como consigo pegar os campos da tabela convenios?????? se eu colocar em outro array() dá erro… tem como vc verificar isso ai por favor????
aguardo
há 1 ano atrás
Olá Cleysson,
Para você pegar os campos da tabela de ligação basta fazer o seguinte:
->join( array( ‘C’ => ‘tabConvenio’ ), ‘P.con_cod = C.con_cod’, array(“C.campo1″,”C.campo2″,”alias_para_campo_3″ => “C.campo3″))
É assim para todos os joins e para o ->from
->from( array(‘P’ => ‘tabPacientes’ ),array(“P.meusCamposAqui”))
Deu para entender ?
Valeu, qualquer coisa é só falar!!
há 1 ano atrás
Pois é amigo fiz dessa forma e não funciona!!!!! dá erro
há 1 ano atrás
até e falei no comentário acima “se eu colocar em outro array() dá erro”
há 1 ano atrás
Conforme vc falou esse é o erro colocando os dados dos campo da tabela C em array()
erro:
Warning: Select query cannot join with another table in
há 1 ano atrás
Jhonny me manda um exemplo ai pode ser??? assim fic melhor de entender te aguardo
há 1 ano atrás
Cleysson,
Esse erro que você falou “Select query cannot join with another table in”
Aparece quando fazemos um join sem setar o metodo
->setIntegrityCheck(false) por padrão ele é true ,
que faz com que ele procure um relacionamento com as classes das tabelas.
Para resolver seu problema basta chamar o método
->setIntegrityCheck(false)
ficaria assim:
$strQueryInfoPacientes = $objPacientes->select()
->setIntegrityCheck(false)
->distinct()
->from( array(‘P’ => ‘tabPacientes’ ))
->join( array( ‘C’ => ‘tabConvenio’ ), ‘P.con_cod = C.con_cod’, array())
->where(‘pac_status = ?’,’1′)->order(‘pac_nome ASC’);
Valeu.