Symfony Jobeet: indeks sayfası DB sorguları refactor Need

1 Cevap php

Doktrin ile Symfony 1.4 kullanın ve benim proje index page de Jobeet projesi ile benzer bir sorunu olduğunu fark ettim.

Kategoriler saymak - Sorun sistem kategorisinde başına kullanıcı işleri gösterir ve biz N 1 +2 * N veritabanı sorgularını olan dizin sayfada.

Eğer> 10 kategori varsa, bu çok iyi değil.

Index eylemine at:

$this->categories = Doctrine::getTable('JobeetCategory')->getWithJobs();

Ve her kategori için görünümde

$category->getActiveJobs(15) // 15 here - is active jobs count.

Nedeniyle Doktrin ilişkilere bunu kullanabilirsiniz

$category->getJobeetJobs()

ve ben sayfa başına sadece bir sorgu alırsınız, ama ihtiyaç olarak bu komut bana kategoride, değil 15 için tüm aktif işleri verir. Tabii ki array_slise veya benzer hile yoluyla sonuçlarını sınırlandırmak olabilir, ama herkes bunun nasıl bir tavsiye verebilir?

Temelde böyle MySQL sorgu şey gerekir:

SElECT * FROM category s LEFT JOIN job s2 ON s.id = s2.category_id WHERE (s2.expires_at > '2010-02-17' AND s2.status = 'published') LIMIT 15

Ancak her kategoride sadece işleri DEĞİL, bu sorgunun tüm sonuçları sınırlamak.

1 Cevap

Aşağıda size örnek verdi mysql sorgu yürütmek gerekir

$this->categories = Doctrine::getTable('JobeetCategory')->createQuery('c')->leftJoin('c.JobeetJobs j')->where('j > ?',$the_date)->andWhere('j.status = ?',$the_status)->limit(15);