Nette database vypisuje v šabloně ve foreach pouze poslední řádek
- CZechBoY
- Člen | 3608
Zdravím,
v projektu používám Nette database a v šabloně se mi daří vypsat pouze
poslední řádek result setu – v tracy liště se mi zobrazují u toho
dotazu 2 řádky.
Model:
return $this->db->table('category')->select(':content.*, '{$src}')->where(':content.name IS NOT NULL')->order('date_added DESC');
Presenter:
$contents = // viz výše model
$this->template->contents = $contents->page($page, 10);
Šablona:
<div n:foreach="$contents as $content">
{$content->date_added}
{$content->name}...
</div>
Vidíte někdo někde nějaký problém?
Děkuju za rady.
- David Matějka
- Moderator | 6445
je problem, ze jako base tabulku uvadis ‚category‘ a pak se snazis vybrat z ‚content‘ – to ti nebude fungovat.
- CZechBoY
- Člen | 3608
Tak jak to mám udělat?
Mám databázi jako
content: content_id, name, author_id (user), slug, description, category_id
(category), …
category: category_id, name, slug, type_id (type)
Chci vytáhnout prostě obsah podle kategorie nebo i bez ní (nejnovější články ze všech kategorií na homepage), k nim autora (jméno z user.username), type.html – u toho type.html nevím jestli to je šťastné řešení, ale nic jinýho mě nenapadlo. Možná by šlo hodit html typu do kategorie rovnou, stejně bude asi vazba kategorie:typy 1:1.
Hele děkuju :-)
Přepsal jsem modelovou metodu na
return $this->db->table('content')->select('content.*,REPLACE(category.type.html,?,content.src) AS html', '{$src}')->where('content.name IS NOT NULL')->order('date_added DESC');
a jede to.
Teď ještě dotaz na to vzor html u kategorie, fakt to nebude šťastný řešení. Nějaký nápady?
Editoval CZechBoY (26. 7. 2014 13:46)
- David Matějka
- Moderator | 6445
$contents = $database->table('content')->where('category_id', $category_id);
<div n:foreach="$contents as $content">
{$content->date_added}
{$content->name}
{$content->author->name}
{$content->category->name}
{$content->category->type->foo}
</div>
- David Matějka
- Moderator | 6445
v db vytáhnu všechno a hodim si aliasy.
to prave neni nette\database pristup. ndbt primarne vzdy vybibira z jedne tabulky a pak efektivne joinuje tabulky dalsi
Nicméně jak udělat ten replace? Hodit replace do šablony?
yep, radeji provadej replace v sablone (nebo v presenteeru)
- CZechBoY
- Člen | 3608
Děkuju, už jsem to přepsal podle @matej21 a vše funguje :-) Díky
Snad nebude nijak extra vadit jak nette dává ty další dotazy do databáze
kvůli uživateli, typu a i kategorii – takže místo 1 dotazu hází asi
4 s IN (…)
Btw jde těm 5 dalším dotazům nějak zamezit a vynutit si join?
Editoval CZechBoY (29. 7. 2014 20:49)