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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

$posts=Post::model()->with(<br />

'author.profile',<br />

'author.posts',<br />

'categories')->together()->findAll();<br />

A consulta acima será executada em um único coman<strong>do</strong> SQL. Sem o méto<strong>do</strong> together,<br />

serão necessárias três consultas: uma irá fazer a junção das tabelas Post, User e Profile,<br />

outra irá fazer a junção de User ePost e a última irá fazer a junção de Post, PostCategory<br />

e Category.<br />

Opções de Consultas Relacionais<br />

Nós mencionamos que pode-se especificar algumas opções adicionais na declaração de<br />

um relacionamento. Essas opções, especificadas na forma de pares nome-valor, são<br />

utilizadas para personalizar as consultas relacionais. Elas estão resumidas abaixo:<br />

• select: uma lista de colunas que serão selecionadas nas classes AR relacionadas.<br />

Por padrão, seu valor é '*', que significa todas as colunas. Quan<strong>do</strong> utilizada em<br />

expressões os nomes das colunas devem se identifica<strong>do</strong>s com um aliasToken<br />

(apeli<strong>do</strong> para tabela), (por exemplo COUNT(??.name) AS nameCount).<br />

• condition: representa a cláusula WHERE. Não tem nenhum valor por padrão. Note<br />

que, para evitar conflitos entre nomes de colunas iguais, referencias a colunas<br />

precisão ser identificadas por um aliasToken, (por exemplo, ??.id=10).<br />

• params: os parâmetros que serão vincula<strong>do</strong>s ao coman<strong>do</strong> SQL gera<strong>do</strong>. Eles devem<br />

ser informa<strong>do</strong>s em um vetor, com pares de nome-valor. Essa opção está disponível<br />

desde a versão 1.0.3.<br />

• on: representa a cláusula ON. A condição especificada aqui será adicionada à<br />

condição de junção, utilizan<strong>do</strong>-se o opera<strong>do</strong>r AND. Note que, para evitar conflitos<br />

entre nomes de colunas iguais, os nomes delas devem ser diferencia<strong>do</strong>s com a<br />

utilização de um aliasToken, (por exemplo, ??.id=10). Essa opção não pode ser<br />

utilizada em relações <strong>do</strong> tipo MANY_MANY. Ela está disponível desde a versão<br />

1.0.2.<br />

• order: representa a cláusula ORDER BY. Não tem nenhum valor por padrão. Note<br />

que, para evitar conflitos entre nomes de colunas iguais, referencias a colunas<br />

precisão ser identificadas por um aliasToken, (por exemplo, ??.age DESC).<br />

• with: uma lista de objetos filhos relaciona<strong>do</strong>s que deverão ser carrega<strong>do</strong>s juntos com<br />

esse objeto. Seja cuida<strong>do</strong>so, pois utilizar esta opção de forma inapropriada poderá<br />

gerar um loop infinito nos relacionamentos.<br />

• joinType: o tipo de junção nesse relacionamento. Por padrão é LEFT OUTER JOIN.<br />

• aliasToken: é o marca<strong>do</strong>r <strong>do</strong> prefixo da coluna. Ele será substituí<strong>do</strong> pelo apeli<strong>do</strong> da<br />

tabela correspondente para diferenciar as referencias às colunas. Seu padrão é '??.'.<br />

• alias: o apeli<strong>do</strong> para a tabela associada a esse relacionamento. Essa opção está<br />

disponível desde a versão 1.0.1. Por padrão é null, indican<strong>do</strong> que o apeli<strong>do</strong> para a<br />

tabela será gera<strong>do</strong> automaticamente. Um alias é diferente de uma aliasToken, uma<br />

vez que esse último é só um marca<strong>do</strong>r que será substituí<strong>do</strong> pelo verdadeiro apeli<strong>do</strong><br />

para a tabela.<br />

• together: especifica se a tabela associada com esse relacionamento deverá ser<br />

forçada a juntar-se a tabela primária. Essa opção só faz senti<strong>do</strong> em relacionamentos<br />

<strong>do</strong> tipo HAS_MANY e MANY_MANY. Se está opção não for utilizada, ou seu valor for<br />

false, cada relacionamento HAS_MANY e MANY_MANY terão suas próprias

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

Saved successfully!

Ooh no, something went wrong!