O Guia Definitivo do Yii 1.1
O Guia Definitivo do Yii 1.1
O Guia Definitivo do Yii 1.1
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.