Dotazy pokladané Nette\Database

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

V novom projekte ktorý robím som si všimol že pri dotaze:

$case = $this->context->case->get($id);
$case->case_status->title;

Nette\Database položí na databázu 2 dotazy.

SELECT *
FROM 'case_record'
WHERE 'id'=1;

SELECT 'id', 'title'
FROM 'case_status'
WHERE ('case_status'.'id' IN (1))

Nemal by sa pri takomto dotaze automaticky vytvoriť join ?

Taktiež som si všimol že napríklad ak namiesto

$case->case_status->title

// napíšem

$case->status->title

Vykoná sa rovnaký dotaz, pritom stĺpec status v tabulke case vôbec nemám takže nemá na čo referecovať … je to korektné správanie ?

Editoval ricco24 (20. 1. 2013 15:37)

enumag
Člen | 2118
+
0
-

Tohle chování je korektní. V době volání ->get($id) NDB ještě neví, že budeš tahat data z nějaké další tabulky. Obecně NDB je navržená tak, že na každou tabulku vytváří samostatný select. Joiny se vytváří automaticky v podstatě pouze kvůli where podmínkám nebo agregačním funkcím. Můžeš to ovlivnit voláním ->select(‚case_status.title‘) při vytváření dotazu (pak ale nemůžeš použít get, ale něco jako ->find($id)->select(…)->fetch()). V každém případě doporučuji nechat to být.

hrach
Člen | 1834
+
0
-

Presne takto to ma byt.