PHP Doktrini: zaten yüklü filtreleme veri?

1 Cevap php

Ben Doktrini ve ActiveRecord yeniyim.

How should I filter a table after it has been loaded? (ben bu çoklu sorgular göndererek tercih edilir herhalde?)

Bu 'iyi' veya 'kötü' mı?

class UserTable extends Doctrine_Table {
    function filterByGroup($group) {
        $ut = new UserTable();
        foreach($this as $u) {
            if($u->group == $group) $ut->add($u);
        }
        return $ut;
    }
}

Edit:

Ben işlevsellik 'filtreleme' sağlayıcısı yerleşik işlevleri vardır anlamak. Ancak aşağıdaki iki kod blokları performansı ile ilgili farklı yapacak?

//1
$users = Doctrine_Core::getTable('Users')->findAll();
$admins = Doctrine_Core::getTable('Users')->findByGroupName('admin');
//2
$admins = Doctrine_Core::getTable('Users')->findByGroupName('admin');
$users = Doctrine_Core::getTable('Users')->findAll();

1 Cevap

Önce beyanı u-> $ atama ise grup, kapalı $ u, onları karşılaştırarak değil. = Ve == (ve ===) dikkat edin.

Orada ne istediğinizi yapmak için (http://www.doctrine-project.org/Doctrine_Table/1_2#method_findby bakınız) mevcuttur "findBy" fonksiyonları inşa edilmiştir. Sen elbette tarafından filtreliyor alan için uygun indeksleri kurmak isteyeceksiniz.

Bir yan not olarak, bunu SQL anahtar kelime olarak bir alan olarak kelime "grup" kullanmaktan kaçınmalısınız. En azından, bunu "group_name" falan isim.

Her neyse, yapmaya çalıştığınız ne anlama ediyorsam, hatta UserTable sınıfta bir işlev eklemek gerekmez. Doğrudan komut değerlerinin süzülmüş bir listesini alabilirsiniz:

$users = Doctrine_Core::getTable('User')->findByGroupName($name);