Deprecated: mysql_escape_string(): This function is deprecated; use mysql_real_escape_string() instead. in /home/hufersil/hufersil.com.br/system/libraries/lumine/lib/Connection/MySQL.php on line 516
HUFERSIL WEBDEVELOPER - join

HUFERSIL.WEBDEVELOPER - Solu√ß√Ķes com qualidade - Hugo Ferreira da Silva

join Sex, 01 de fevereiro de 2008 - as 21h18

$obj->join( Lumine_Base $obj, [String $type = 'INNER' [, String $alias = '' [, String $linkName = null [, String $linkTo = null [, $extraCondition = null [, $arg1 [, $arg2 ... ]]]]]]]);

Este foi um dos métodos que mais sofreu alteração nesta versão de Lumine, assim como where.

Possibilita a união de duas ou mais entidades. Por exemplo:

  1. // nova pessoa
  2. $pessoa = new Pessoa;
  3. // endereco
  4. $endereco = new Endereco;
  5. // novo telefone
  6. $telefone = new Telefone;
  7.  
  8. // une pessoa com endereco
  9. $pessoa->join($endereco);
  10. // une pessoa com telefone
  11. $pessoa->join($telefone);
  12.  
  13. // efetua a consulta
  14. $total = $pessoa->find();

A consulta a ser efetuada será semelhante a esta:

  1. SELECT * FROM pessoa INNER JOIN endereco ON(pessoa.idpessoa=endereco.idpessoa)  INNER JOIN telefone ON(cliente.idpessoa =telefone.idpessoa )

O método de união padrão deste método é INNER. Para alterá-lo, coloque como segundo argumento na chamada, por exemplo:

  1. $lista->join($telefone, 'LEFT');

O terceiro argumento deste método, é para utilizar um apelido (alias) para a entidade, por exemplo:

  1. $lista->join($telefone,'INNER', 'tel');
  2.  
  3. // agora podemos acrescentar pelo apelido, no select
  4. $lista->select('tel.ddd, tel.numero');

Quando você NÃO deseja realizar a união definida nos mapeamentos, você pode especificar os parametros $linkName e $linkTo. O primeiro, refere-se ao membro da classe chamadora, o segundo, à classe que está sendo unida.

  1. $lista = new Usuario;
  2. $venda = new Venda;
  3.  
  4. $lista->alias('u')
  5.   ->join($venda, 'INNER', 'v', 'codusuario', 'usuario')  // lembre-se que estamos usando o MEMBRO, n√£o a coluna
  6.   ->select('u.codusuario, u.nome, count(v.codvenda) as total')
  7.   ->find();

Ainda existe a possibilidade de você adicionar condições extras para o JOIN. O padrão, é fazer a comparação entre dois membros. Se quiser adicionar mais condições, utilize o parâmetro $extraCondition

  1. // assim, esta consulta ir√° verificar quantas compras cada usuario fez antes de 01/01/2008
  2. $lista->alias('u')
  3.   ->join($venda,'LEFT','v',null,null,'v.datavenda <= ?', '2008-01-01')
  4.   ->select('u.nome, count(v.codvenda) as total')
  5.   ->find();