špatný zápis – latte foreach

JazeX
Člen | 10
+
0
-

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)

ForestCZE
Člen | 209
+
0
-

Ahoj, zkus místo query použít fetchAll.

$this->template->prokliky = $this->database->fetchAll('SELECT * FROM clicks');

Editoval ForestCZE (18. 3. 2020 20:44)

JazeX
Člen | 10
+
+1
-

Už to funguje!!
JEŽIŠI KRISTE, DÍKY MOC.

Hodně zdraví a moc hezký večer.
Ten pocit.. ahh… skvělý… díky♥

Šaman
Člen | 2634
+
+2
-

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)