Přistupování k cizímu klíči – bez explicitního SELECTu nevytáhne sloupec s cizím klíčem

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

Zdravím,

na žádost vytvářím nové vlákno s tímto problémem. Původní vlákno zde https://forum.nette.org/…-jak-pracuje.

Aktualizoval jsem v jednom projektu refaktorované Nette\Database (viz předchozí vlákno) a NDB začalo hlásit chybu při přístupu k jiné tabulce, jelikož si nevytáhl v SELECTu sloupec s cizím klíčem. Vyřešil jsem to explicitním napsáním sloupců do metody SELECT.

Vygenerovaný SQL dotaz:

SELECT `item`.*
FROM `item`
LEFT JOIN `web` ON `item`.`web_id` = `web`.`web_id`
INNER JOIN `type_discount` ON `item`.`type_discount_id` = `type_discount`.`type_discount_id`
WHERE (`item`.`state` = ?) AND (`web`.`removed` = ?) AND (`web`.`authorized` = ?) AND
(`type_discount`.`type_discount_id` IS NOT NULL) AND (`item`.`fixed_state` = ?)

PHP část:

<?php
$items = $this->connection->table("item")
					->where("item.state = ?", 1)
					->where("web.removed = ?", 0)
					->where("web.authorized = ?", 2)
					->where("item.fixed_state", 1);

// Zde ještě získávám počet $item->count() pro paginator, a následně předávám $items do šablony
?>

V šabloně:

{foreach $items->select("item.*") as $item}
{var $additional = $item->ref("type_discount")}
 ... zde není $additional, pokud nezavolám select("item.*")
{/foreach}

PS: Cache jsem samozřejmě vždy vymazal, čili zde problém není

Editoval frosty22 (7. 8. 2012 16:44)

hrach
Člen | 1838
+
0
-
  • jakou chybu to haze? $additional = NULL?
  • generuje to spatny dotaz (bez explicitniho selectu)? Jaky?
frosty22
Člen | 373
+
0
-

Aj promiň, koukám že jsem to napsat docela blbě ;(

Takže $additional = FALSE, ale nyní jsem zjistil, že mi to dělá jenom prvně, tj. když smažu cache, tak mi to hodí $additional = FALSE a po refreshi již je to nadále OK.

A jedná se tedy o filtrovací query, čili když rozšířím dotaz např. o další where, tak se to stane prvně znovu.

A co se týče onoho dotazu, pokud ti to tedy pomůže, tak budu muset to nějak vypreparovat ze systému – tak to se tam tvoří dost dotazů a teď nevím, které s tím souvisí přímo a které ne. Ale na první pohled to vypadá, že to generuje stejné dotazy, leč tedy to asi není pravděpodobné. Ale pravděpodobně to souvisí s cachováním SELECTovaných sloupců.

Editoval frosty22 (9. 8. 2012 13:10)