O Guia Definitivo do Yii 1.1
O Guia Definitivo do Yii 1.1
O Guia Definitivo do Yii 1.1
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
class Post extends CActiveRecord<br />
{<br />
public function relations()<br />
{<br />
return array(<br />
'commentCount'=>array(self::STAT, 'Comment', 'postID'),<br />
'categoryCount'=>array(self::STAT, 'Category', 'PostCategory<br />
(postID, categoryID)'),<br />
);<br />
}<br />
}<br />
No código acima, declaramos duas consultas estatísticas: commentCount, que calcula o<br />
número de comentários em um post e categoryCount, que calcula o número de categorias<br />
a quem um post pertence. Note que o relacionamento entre Post e Comment é <strong>do</strong> tipo<br />
HAS_MANY, enquanto o relacionamento entrePost e Category é MANY_MANY (com a<br />
tabela associativa PostCategory). Como podemos ver a declaração é bastante similar a<br />
das relações descritas anteriormente. A única diferença é que o tipo de relação agora é<br />
STAT.<br />
Com a declaração acima, podemos recuperar o número de comentários para um post<br />
acessan<strong>do</strong> a propriedade $post->commentCount. Ao acessá-la pela primeira vez, uma<br />
instrução SQL será executada, implicitamente, para retornar o resulta<strong>do</strong> correspondente.<br />
Como já sabemos, essa técnica é chamada de lazy loading. Também podemos utilizar a<br />
técnica eager loading se precisarmos determinar a quantidade de comentários para vários<br />
posts.<br />
$posts=Post::model()->with('commentCount', 'categoryCount')->findAll();<br />
O código acima irá executar três instruções SQL para retornar to<strong>do</strong>s os posts juntamente<br />
com a quantidade de comentários e categorias em cada um deles. Utilizan<strong>do</strong> lazy loading,<br />
acabaríamos executan<strong>do</strong> 2*N+1instruções SQL, se existirem N posts.<br />
Por padrão, uma consulta estatística utiliza a expressão COUNT para calcular os<br />
resulta<strong>do</strong>s. Podemos personaliza-la especifican<strong>do</strong> opções adicionais, no méto<strong>do</strong> relations<br />
(). As opções disponíveis estão resumidas abaixo:<br />
• select: a expressão estatística. Por padrão é COUNT(*), que contará to<strong>do</strong>s os<br />
objetos.<br />
• defaultValue: o valor a ser atribuí<strong>do</strong> aos registros que não receberem um resulta<strong>do</strong><br />
em uma consulta estatística. Por exemplo, se um post não tiver comentários, o valor<br />
de commentCount será o especifica<strong>do</strong> nesta propriedade. Por padrão, seu valor é 0.<br />
• condition: representa a cláusula WHERE. Não tem nenhum valor por padrão.<br />
• params: representa os parâmetros que devem ser vincula<strong>do</strong>s na instrução SQL<br />
gerada.