Home > Yii > Parameterized Named Scopes

Parameterized Named Scopes

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:

  1. yiiframework – Guidelines for good schema design
  2. CButtonColumn erweitern
  3. Gegen DB authentifizieren
  4. Ein Modul als Admin Backend
  5. CGridColumn
  6. Ein Anrede-Behavior
  7. CGridView
  8. renderPortlets
  9. Anonyme Funktionen
  10. Wie ich Datenbank-Tabellen und -Felder benenne
  11. Models aus Modulen verwenden
  12. yiic shell
  13. Widgets
  14. Yii Module
  15. Erste Schritte mit Yii
Author: Categories: Yii Tags: , ,
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks