Test naplnění proměnné z databáze v šabloně
- jarks
- Člen | 94
Dobrý den, nevím jak otestovat, že proměnná v šabloně obsahuje
nějaká data z databázové tabulky. Jde o použití Nette\Database.
V presenteru jen zavolám model:
$this->template->items = $this->getService('model')->getItems();
V šabloně:
{if $items} //<< co sem napsat, aby platilo následující:
<h1>Tohle by se nemělo vypsat, pokud není co vypisovat</h1>
{foreach $items as $i}
{$i->name} <br/>
{/foreach}
{/if}
Nápis se objeví i když je výsledek prázdný, protože proměnná $items
obsahuje Nette\Database\Statement
, takže vlastně prázdná není.
Můžete mi prosím poradit?
- voda
- Člen | 561
{if}
<h1>Výpis řádků z databáze</h1>
{foreach $database->table as $row} ... {/foreach}
{/if $row}
- jarks
- Člen | 94
model:
public function getItems($cat) {
return $this->database->query("
SELECT iditems, name, DATE_FORMAT(date,'%d.%m.%Y') as datum
FROM items
LEFT JOIN categories on items.category_id = categories.idcategories
WHERE cat = ?
ORDER BY name", $cat);
}
Myslím, že na tom snad není nic zvláštního. query
používám proto, že nemůžu dodržet konvence pojmenování klíčů. Jde
o starou databázi, kterou využívají i jiné aplikace. Pokud výsledek
nějaká data obsahuje, všechno funguje normálně. Nedaří se mi jen
otestovat prázdný výsledek.
Proměnná $items
obsahuje
Nette\Database\Statement Object
. $items->count()
dává Call to undefined method Nette\Database\Statement::count()
.
Kdyby na tom záleželo: PHP 5.3.6, Nette 2.0-beta.
- jarks
- Člen | 94
22 napsal(a):
neměl by jsi ta data nějak fetchnout, aby jsi tam neměl statment?
Díky! To je ono. Zatím jsem dělal jen s dibi a myslel jsem, že s Nette\Database to tam být nemusí.
$this->template->items = $this->getService('model')->getItems()->fetchAll();
a pak funguje {if count($items)}
.
Editoval jarks (23. 11. 2011 16:06)