NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Doplnění databázových modelů

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
raito
Člen
Avatar
raito:9.4.2016 10:45

Zdravím,

chtěl bych se optat na best-practise ohledně manipulování s modely. Příklad: Mám model Article, který je ORM entitou pro tabulku Articles. Pomocí QB si vytáhnu posledních 10 článků které jsou nastaveny jako publikované:

public function getLastPublished($count = 10) {
        $qb = $this->em->createQueryBuilder();

        $qb->select('a')
                ->from('App\Models\Article', 'a')
                ->where('a.publish = :published')
                ->setMaxResults($count)
                ->setParameter('published', true);
        return $qb->getQuery()->getResult();
}

Entita Article má vazbu ManyToOne na ArticleCategory. Ty mají rekurzivní vazbu samy na sebe kvůli dědičnosti, což je vedlejší, ale výše uvedený QB mi vrátí kolekci 0-10 entit Article a já nyní potřebuji ještě pokaždé jinak přistoupit na jejich ArticleCategory, poslepovat je podle určitých kritérií a poté je zpět přilepit k modelu, například poslepuji z potomků jejich celý strom a toto celé poté předat do template.

Doposud jsem tento problém řešil tak, že jsem foreachem iteroval skrz celou kolekci a vytvořil obálku nad celou kolekcí + přidružený data takto:

foreach($this->article->getLastPublished(15) as $article){
    $articles[] = array(
        'data'=> $article,
        'categoryTree' => $category->getCategoryTree($article->getCategory());
    );
}

Do šablony pak putuje celé pole $articles které má v indexu "data" samotnou entitu a v dalších indexech "přilepené" data.

Otázka zní: Dá se cíle dosáhnout nějak jednodušeji a smysluplně? Jediná alternativní varianta co mě napadá je v modelu Article vytvořit metodu která by se starala o zavolání metody getCategoryTree a vracela výsledek a dala by se pak přímo zavolat v šabloně.

Díky.

Odpovědět
9.4.2016 10:45
Asi sem usnul. Co se dělo posledních... 5 let?
Avatar
Odpovídá na raito
Martin Konečný (pavelco1998):9.4.2016 15:55

zdar,

$category je taky entita? Pokud jo, pak by na ni entita Article měla mít vazbu, takže by neměl být problém udělat metodu, která ta data z kategorie nějak zpracuje (tzn. použití toho alternativního způsobu).
V některých případech ale taky dělám ten způsob s foreach, protože to někdy tak jednoduše nejde.

Nahoru Odpovědět
9.4.2016 15:55
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.