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.

class Post extends CActiveRecord<br />

{<br />

......<br />

public function scopes()<br />

{<br />

return array(<br />

'published'=>array(<br />

'condition'=>'status=1',<br />

),<br />

'recently'=>array(<br />

'order'=>'createTime DESC',<br />

'limit'=>5,<br />

),<br />

);<br />

}<br />

}<br />

Cada named scope é declara<strong>do</strong> como um vetor que pode ser utiliza<strong>do</strong> para iniciar uma<br />

instância da classe CDbCriteria. Por exemplo, o named scope recently especifica que o<br />

valor da propriedade order seja createTime DESC e o da propriedade limit seja 5, que<br />

será traduzi<strong>do</strong> em um critério de consulta que retornará os 5 posts mais recentes.<br />

Na maioria das vezes, named scopes são utiliza<strong>do</strong>s como modifica<strong>do</strong>res nas chamadas<br />

aos méto<strong>do</strong>s find. Vários named scopes podem ser encadea<strong>do</strong>s para gerar um conjunto<br />

de resulta<strong>do</strong>s mais restrito. Por exemplo, para encontrar os posts publica<strong>do</strong>s<br />

recentemente, podemos fazer como no código abaixo:<br />

$posts=Post::model()->published()->recently()->findAll();<br />

Geralmente, os named scopes aparecem a esquerda da chamada ao méto<strong>do</strong> find. Então,<br />

cada um deles fornece um critério de pesquisa que é combina<strong>do</strong> com outros critérios,<br />

incluin<strong>do</strong> o que é passa<strong>do</strong> para o méto<strong>do</strong> find. Esse encadeamento é como adicionar uma<br />

lista de filtros em um consulta.<br />

A partir da versão 1.0.6, named scopes também podem ser utiliza<strong>do</strong>s com os méto<strong>do</strong>s<br />

update e delete. Por exemplo, no código a seguir vemos como deletar to<strong>do</strong>s os posts<br />

publica<strong>do</strong>s recentemente:<br />

Post::model()->published()->recently()->delete();<br />

Nota: Named scopes podem ser utiliza<strong>do</strong>s somente como méto<strong>do</strong>s a nível de classe.<br />

Por esse motivo, o méto<strong>do</strong> deve ser executan<strong>do</strong> utilizan<strong>do</strong> NomeDaClasse::model().<br />

Named Scopes Parametriza<strong>do</strong>s

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

Saved successfully!

Ooh no, something went wrong!