where v šabloně – nevidím chybu

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

Ahoj, potřebuji vypsat jen platby s id 3, tak si je chci uložit doi proměnné $platbaTed a následně projet foreachem. Přiřazení do platba teď ale selže (chyba: htmlspecialchars() expects parameter 1 to be string, object given).

Co mám v špatně? Nějak to nevidím.

{$platbaTed = $platby->where("id_zakaznik_sluzba", "3")}

Díky Dan

Mariocz
Člen | 52
+
0
-

proměnná se definuje {var $nazev = 'aaa'} Co jsi napsal ty se pokouší proměnnou vypsat.

Editoval Mariocz (2. 4. 2014 17:21)

kloban
Člen | 123
+
0
-

Díky. :-) Ještě jsem teď narazil na problém, že když to mám zanořené ve {foreach} tak se mi v každém, cyklu přidá další where podmínka. Takže tam je v posledním cyklu několik where podmínek spojených operátorem AND. Jak udělat aby v každém cyklu byla vždy jedna where podmínka (v každém cyklu potřebuji jinou).

Mariocz
Člen | 52
+
0
-

Nevím jestli chceš přímo tohle, zkus

{foreach $platby->where("id_zakaznik_sluzba", "3") as $platba)}
	{$platba->neco}
{/foreach}
kloban
Člen | 123
+
0
-

Mám tento kód, kde v proměnné $s->id je v prvním průchodu cyklem „2“ a v druhém „3“.

{foreach $platby->where("id_zakaznik_sluzba", $s->id) as $platba}
	{$platba->castka}
{/foreach}

V prvním cyklu nette vygeneruje:


SELECT `id`, `castka`
FROM `platba`
WHERE (`id_zakaznik_sluzba` = 2)

Což je v pohodě, ale v druhém cyklu vygeneruje:

SELECT `id`, `castka`
FROM `platba`
WHERE (`id_zakaznik_sluzba` = 2) AND (`id_zakaznik_sluzba` = 3)

A tam bych chtěl pouze

WHERE (`id_zakaznik_sluzba` = 3)
Mariocz
Člen | 52
+
0
-

to vypadá jako kdyby při dalším průchodu bylo v $s->id pole. zkus {dump $s->id}

pokud od DB očekáváš jen jeden řádek tak je zbytečný foreach, místo toho použij něco takovýho:

{var $platba $platby->where("id_zakaznik_sluzba", $s->id)->fetch()}
{$platba->castka}

bylo by lepší si částky který budeš potřebovat připravit už v presenteru do pole a pak vypsat

sKopheK
Člen | 207
+
0
-

$platby je pravděpodobně objekt třídy \Nette\Database\Table\Selection, nad kterým voláš jeho metody. Několikanásobné volání where() podmínky přidává, nikoli upravuje, nějaké změny, resp. nová metoda, která by nahrazovala, je v nedohlednu – viz. https://forum.nette.org/…re-nahrazeni. Jedno z řešení by mohlo být následovné

{foreach ... as $s}
	{var $platby_alt = clone $platby}
	{foreach $platby_alt->where("id_zakaznik_sluzba", $s->id) as $platba}
	...
	{/foreach}
{/foreach}
kudlajz
Člen | 70
+
0
-

Zkus

{? $platbaTed = $platby->where("id_zakaznik_sluzba", "3")}

a pak to projed foreachem..