v latte nejde spravne where
- eis
- Člen | 3
v latte potrebuju zpristupnit data z databaze, do template si poslu 2 cely tabulky a pak znich chcu vykreslit tabulku
{foreach $pozadavky as $pozadavek}
<th class="typ">{$pozadavek->typ}</th>
<th class="nemovitost">{$pozadavek->nemovitost->nazev}</th>
{foreach $users->where("id = '$pozadavek->vzneslKlientId'") as $klient}
</tr><th class="klient">{$klient->jmeno}</th>
{/foreach}
{foreach $users->where("id = '$pozadavek->zpracovavaZamLogin'") as $klient}
<th class="klient">{$klient->jmeno}</th>
{/foreach}
{/foreach}
a problem je vtom ze pri první volani where se provede jedna podminka
„WHERE (id
= ‚3‘)“ jak má, ale dalsi „WHERE
(id
= ‚3‘) AND (id
= ‚9‘)“ uz si nabaluje
podminky ste predesle.
- romiix.org
- Člen | 343
- Toto je správanie Nette\Database – nemá to nič s latte.
- Podmienku
$users->where("id = '$pozadavek->vzneslKlientId'")
sa dá zapísať ako$users->where("id",$pozadavek->vzneslKlientId)
. - Toto nie je chyba ale vlastnosť:)
Ak to takto chceš použiť malo by to vyzerať nasledovne:
{foreach $pozadavky as $pozadavek}
<th class="typ">{$pozadavek->typ}</th>
<th class="nemovitost">{$pozadavek->nemovitost->nazev}</th>
{var $users2 = clone $users}
{foreach $users->where("id = '$pozadavek->vzneslKlientId'") as $klient}
</tr><th class="klient">{$klient->jmeno}</th>
{/foreach}
{foreach $users2->where("id = '$pozadavek->zpracovavaZamLogin'") as $klient}
<th class="klient">{$klient->jmeno}</th>
{/foreach}
{/foreach}
4. Predpokladám, že sa snažíš vypísať jmeno
používateľov v tabuľke user
prepojených cez stĺpce
vzneslKlientId
a vzneslKlientId
prepojené cudzími
kľúčmi cez AcriveRow $pozadavek
V tom prípade by to mohlo vyzerať nasledovne:
{foreach $pozadavky as $pozadavek}
<th class="typ">{$pozadavek->typ}</th>
<th class="nemovitost">{$pozadavek->nemovitost->nazev}</th>
{foreach $pozadavek->related('user','vzneslKlientId') as $klient}
</tr><th class="klient">{$klient->jmeno}</th>
{/foreach}
{foreach $pozadavek->related('user','zpracovavaZamLogin') as $klient}
<th class="klient">{$klient->jmeno}</th>
{/foreach}
{/foreach}
5. Predpokladám, že </tr>
je tam omylom.
6. Prepísané do n:foreach
{foreach $pozadavky as $pozadavek}
<th class="typ">{$pozadavek->typ}</th>
<th class="nemovitost">{$pozadavek->nemovitost->nazev}</th>
<th n:foreach="$pozadavek->related('user','vzneslKlientId') as $klient" class="klient">{$klient->jmeno}</th>
<th n:foreach="$pozadavek->related('user','zpracovavaZamLogin') as $klient" class="klient">{$klient->jmeno}</th>
{/foreach}
Opravené ref
na related
.
Editoval romiix.org (31. 10. 2013 23:23)
- David Matějka
- Moderator | 6445
trochu opravim romiix.org:
nikoliv ref, ale related, ref je pro to one, related pro to many.. pouziti ale
bude stejne.
a k bodu 2 od romiix.org: ne, ze se to takhle da zapsat, takhle to zapisuj vzdycky, jinak buh bude zabijet kotatka!
- romiix.org
- Člen | 343
matej21: Vďaka za opravu, preklep. Opravil som predošlí príspevok aby bol správne.
Editoval romiix.org (31. 10. 2013 23:24)
- eis
- Člen | 3
kdyz to ted pouziju tak mi to vytvori spatny sql dotaz. Nevim jestli mam teda spatne definovany sql tabulky nebo co je spatne.
CREATE TABLE pozadavek (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
vzneslKlientId int(10) unsigned NOT NULL,
zpracovavaZamLogin int(10) unsigned ,
KEY fk_vzneslKlientId (vzneslKlientId),
KEY fk_login (zpracovavaZamLogin),
PRIMARY KEY (id),
CONSTRAINT fk_vzneslKlientId FOREIGN KEY (vzneslKlientId) REFERENCES user (id),
CONSTRAINT fk_login FOREIGN KEY (zpracovavaZamLogin) REFERENCES user (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE user (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
username varchar(50) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*tabulky jsou osekany o zbytecny sloupce
a kdyz pouziju
<th n:foreach="$pozadavek->related('user','vzneslKlientId') as $klient" class="klient">{$klient->jmeno}</th>
tak to vytvori sql dotaz
SELECT *
FROM `user`
WHERE (`user`.`vzneslKlientId` IN (1, 2, 3, 4, 5, 7, 9))
kterej je samozrejme spatne, protoze sloupec vzneslKlientId existuje jen v tabulce pozadavek.
- romiix.org
- Člen | 343
Tak teda som mal asi správne ten prvý zdroják, ktorý som potom opravil na zlý.
Skús použiť:
{foreach $pozadavky as $pozadavek}
<th class="typ">{$pozadavek->typ}</th>
<th class="nemovitost">{$pozadavek->nemovitost->nazev}</th>
<th class="klient">{$pozadavek->ref('user','vzneslKlientId')->jmeno}</th>
<th class="klient">{$pozadavek->ref('user','zpracovavaZamLogin')->jmeno}</th>
{/foreach}