Dotazy pokladané Nette\Database
- ricco24
- Člen | 141
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
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.