tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

feature request: Injektovat DibiRow aktuální DibiConnection

před 7 lety

xxxObiWan
Člen | 844
+
0
-

Ahoj, prosím o úpravu setRowClass tak, aby se vytvořenému RowClass předávalo aktuální připojení k DB.

Využití:

$articles = $dibi->query("SELECT * FROM `articles`");
$articles->setRowClass('ArticleEntity');

class ArticleEntity extends DibiRow {
    function getTags() {
        return $this->connection->fetchAll("SELECT * FROM `articles_tags` WHERE `article_id`=%i", $this->id);
    }
}

výsledkem by bylo krásné lazy načítání hodnot (v tomto případě tagů ke článku), například v šabloně

{foreach $articles as article}
    {foreach $article->tags as $tag}   <!-- tagy se načtou až zde -->
        {$tag->name},
    {/foreach}
{/foreach}

Děkuji

před 7 lety

HosipLan
Moderator | 4693
+
0
-

Tímto by jsi narazil na tzv. 1:N problém, což je velice kontraproduktivní a tento problém již řeší NotORM, nebo Nette\Database.

Nevidím v téhle změně přínos.

před 7 lety

baz
Člen | 43
+
0
-

Přesně tohle bych také potřeboval, ale neřešil bych to implicitním děděním…

Já to nechci používat v takové podobě jako je zmíněno v příspěvku, ale potřebuji nad objektem provádět složitější operace, které nejsou jen o dotazu do DB, ale nějakém zpracování získaných hodnot a vrácení výsledku.

Je implementačně hodně náročné dát funkci setRowClass druhý nepovinný parametr, který by mohl obsahovat připojení k databázi a v případě, že by existoval, tak by ji nastavil i v konstruktoru nově vznikajícího elementu?

BTW: řeším to souběžně i tady: https://forum.nette.org/…tte-database#…

ale možná to patří spíš sem, než na nette (tam jsem to zprvu zkoušel vyřešit i jinými způsoby, ale už mi zbývá pouze tento)