Databaza: Ako si v modeli dobre pripravit data

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
steelbull
Člen | 241
+
0
-

Model:
$result = $this->context->table(‚articles‘);

Presenter:
$this->template->articlesList = $result;

Template:
{foreach($articles as $article)}
{$article->user->fullname}
{/foreach}

Nette vygeneruje pre kazdy article jeden query.

Neda sa to urobit tak, aby k articles uz v modeli LEFT JOINlo uzivatelov a vygenerovalo vysledok jednym query?

Mysteria
Člen | 797
+
0
-

Nedá, protože NDBT je takto navržena, navíc v 99% případů je to mnohem úspornější řešení než JOINování.

David Matějka
Moderator | 6445
+
+1
-

1. precti si, jak formatovat kod


Nette vygeneruje pre kazdy article jeden query.

jsi si jist? Ten tvuj priklad by mel vygenerovat vzdy pouze dva dotazy – jeden na clanky a jeden na uzivatele

Teoreticky se to necha joinout pro select, ale je to v rozporu s filozofii NDBT, viz doc a prvni odstavec:

Hlavní myšlenkou je načítání dat pouze z jedné tabulky a tak, aby se tyto dotazy pokládaly jen jednou. Data jsou načtena do ActiveRow instancí. Data z jiných tabulek připojených vazbami jsou načteny samostatnými požadavky – o to se stará samotná vrstva Database\Table.

Editoval matej21 (4. 11. 2014 19:09)

steelbull
Člen | 241
+
0
-

Ale 100 riadkov = 100 zbytocnych selectov, to je OK?

steelbull
Člen | 241
+
0
-

Ale 100 riadkov = 100 zbytocnych selectov, to je OK?

David Matějka
Moderator | 6445
+
0
-

Ne, jak pisu – ten tvuj priklad by mel provest (pokud nam nezatajujes nejaky kod) pouze dva dotazy

Oli
Člen | 1215
+
0
-

@steelbull jsi si jisty, že 100 řádků = 100 dotazů? Jak psal @matej21 mělo by to vygenerovat jeden dotaz pro články a jeden pro uživatele. Takže 100 řádků = 2 dotazy; 2 řádky = 2 dotazy; 1 řádek = 2 dotazy

steelbull
Člen | 241
+
0
-

V latte som pouzil $variable->ref(…) a pre kazdy riadok sa vykonalo jedno query.

Moze byt rozdiel v pocte query voci tomuto zapisu:

$variable->column->table2column?