špatný zápis – latte foreach

- JazeX
- Člen | 10
Ahoj, vím, že mám někde chybu, ale koukám na to už dobrou hodinu a
vážně ji nevidím.
Můžete mi prosím pomoct?
Presenter:
<?php
declare(strict_types=1);
namespace App\Presenters;
use Nette;
final class AdminPresenter extends Nette\Application\UI\Presenter
{
/** @var Nette\Database\Context */
private $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
public function renderDefault(): void
{
$this->template->prokliky = $this->database->query('SELECT * FROM clicks')->fetch();
}
}
Šablona:
{if $prokliky}
<h2>Prokliky</h2>
<table class="table table-striped">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Kontrakt</th>
<th scope="col">Zpracovatel</th>
<th scope="col">CPC</th>
<th scope="col">IP adresa</th>
<th scope="col">DNS záznam</th>
<th scope="col">Odkazující</th>
<th scope="col">HTTP hlavička</th>
</tr>
</thead>
<tbody>
{foreach $prokliky as $proklik}
<tr>
<th scope="row">{$proklik->cID}</th>
</tr>
{/foreach}
</tbody>
</table>
{/if}
Výsledek:
Notice
Trying to get property 'cID' of non-object
Pokud se rozhodnu error přeskočit:
Nette\MemberAccessException
Cannot read an undeclared property Nette\Utils\DateTime::$cID.
Foreach proběhne, pokud smažu {$proklik->cID}, vytvoří
řádek v tabulce pro každý záznam. Já akorát fakt netušim, co v tom
píšu špatně.
Stejně tak si nejsem vědom, že bych \Utils\DateTime kdekoliv použil.
Mockrát díky.
//EDIT:
Zkusil jsem si dumpnout $proklik[‚cID‘], vypíše jedničku. Netuším, kde
by mohla být chyba.
Editoval JazeX (18. 3. 2020 20:31)

- Šaman
- Člen | 2668
Nedávej na konec ->fetch().
Samotná metoda query() vrací iterovatelný
ResultSet. Po zavolání fetch() dostaneš jeden
řádek Row, nebo null.
Ty tedy do šablony do proměnné $prokliky předáváš první
nalezený proklik, nebo null. A to pak zkoušíš prohnat foreachem.
Edit: Nebo teda to fetchAll(), což vrátí všechny výsledky
jako pole. Foreachi je jedno, jestli přijde ResultSet, nebo
array, s obojím umí pracovat.
Editoval Šaman (18. 3. 2020 20:56)