20.11.2014 Views

O Guia Definitivo do Yii 1.1

O Guia Definitivo do Yii 1.1

O Guia Definitivo do Yii 1.1

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Informação: Quan<strong>do</strong> o nome de uma coluna aparece em duas ou mais tabelas em<br />

uma junção, eles precisam ser diferencia<strong>do</strong>s. Isso é feito prefixan<strong>do</strong>-se o nome da<br />

tabela ao nome da coluna. Por exemplo, id se torna Team.id. Entretanto, nas consultas<br />

relacionais utilizan<strong>do</strong> AR, não temos essa liberdade porque as instruções de<br />

relacionamentos são geradas automaticamente pelo Active Record, que dá a cada<br />

tabela um apeli<strong>do</strong> (alias). Por isso, para evitar evitar conflitos entre nomes de colunas<br />

devemos utilizar um marca<strong>do</strong>r para identificar a existência de uma coluna que precisa<br />

ser diferenciada. O AR irá substituir esse marca<strong>do</strong>r pelo apeli<strong>do</strong> da tabela,<br />

diferencian<strong>do</strong> apropriadamente a coluna.<br />

Opções Dinâmicas em Consultas Relacionais<br />

A partir da versão 1.0.2, podemos utilizar opções dinâmicas em consultas relacionais,<br />

tanto no méto<strong>do</strong> with() quanto na opção with. As opções dinâmicas irão sobrescrever as<br />

opções existentes, declaradas no métod orelations(). Por exemplo, com o modelo User<br />

acima, podemos utilizar eager loading para retornar os posts de um determina<strong>do</strong> autor em<br />

ordem crescente (a opção order especificada na relação utiliza ordem decrescente), como<br />

no exemplo abaixo:<br />

User::model()->with(array(<br />

'posts'=>array('order'=>'??.createTime ASC'),<br />

'profile',<br />

))->findAll();<br />

A partir da versão 1.0.5, opções dinâmicas também podem ser utilizadas com o lazy<br />

loading. Para isso, devemos chamar o méto<strong>do</strong> cujo nome é o mesmo da relação e passar<br />

os opções dinâmicas como parâmetros para ele. Por exemplo, o código a seguir retorna<br />

os posts de um usuário cujo status é 1:<br />

$user=User::model()->findByPk(1);<br />

$posts=$user->posts(array('condition'=>'status=1'));<br />

Consultas Estatísticas<br />

Nota: Consultas estatísticas são suportadas a partir da versão 1.0.4.<br />

Além das consultas relacionais descritas acima, o <strong>Yii</strong> também suporta as chamadas<br />

consultas estatísticas (statistical query, ou aggregational query). Essas consultas retornam<br />

informações agregadas sobre objetos relaciona<strong>do</strong>s, tais como o número de comentários<br />

em cada post, a avaliação média para cada produto, etc. Consultas estatísticas só podem<br />

ser utilizadas em objetos relacionadas com HAS_MANY (por exemplo, um post tem vários<br />

comentários) ou MANY_MANY (por exemplo, um post pertence a várias categorias e uma<br />

categoria tem vários posts).<br />

Executar consultas estatísticas é bem pareci<strong>do</strong> com a execução de consultas relacionais<br />

que descrevemos anteriormente. Primeiro precisamos declarar o consulta estatística no<br />

méto<strong>do</strong> relations() da classe CActiveRecord, como fazemos com as consultas relacionais.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!