Parameterized Named Scopes
2. Juli 2009
Um die letzten 10 News aus der Datenbank zu ziehen, würde ich folgende Formel benutzen:
$news = News::model()->getRecent(10);
die getRecent()-Methode sieht dann so aus:
class News extends CActiveRecord { public function getRecent($limit = 10) { $c = new CDbCriteria(); $c->order = "created DESC"; $c->limit = 10; return $this->findAll($c); } }
Mit diesen Parametrisierten Named Scopes kann man das eleganter lösen:
$news = News::model()->recently(5)->findAll();
was voraussetzt:
class News extends CActiveRecord { public function recently($limit = 10) { $this->getDbCriteria()->mergeWith(array( 'order' => 'created DESC', 'limit' => $limit )); return $this; } }
und nun noch News, die auch wirklich freigegeben wurden.
$news = News::model()->recently(5)->published()->findAll();
class News extends CActiveRecord { public function published() { $this->getDbCriteria()->mergeWith(array( 'condition' => 'status = 1', )); return $this; } }
Nicht-Parametrisierte Named Scopes wie in diesem Fall die published-Methode benötigen nicht mal eine eigene Methode. Nicht-Parametrisierte Named Scopes lassen sich in einer Methode scopes() zusammenfassen, was folgendermaßen aussieht:
$news = News::model()->recently()->published()->findAll();
class News extends CActiveRecord { public function scopes() { return array( "published" => array( "condition" => "status = 1" ), "recently" => array( "order" => "created DESC", "limit" => 10 ) ); } }
Verwandte Artikel:
- yiiframework – Guidelines for good schema design
- CButtonColumn erweitern
- Gegen DB authentifizieren
- Ein Modul als Admin Backend
- CGridColumn
- Ein Anrede-Behavior
- CGridView
- renderPortlets
- Anonyme Funktionen
- Wie ich Datenbank-Tabellen und -Felder benenne
- Models aus Modulen verwenden
- yiic shell
- Widgets
- Yii Module
- Erste Schritte mit Yii
Letzte Kommentare