Trying to get property of non-object in template
- Andurit
- Člen | 131
Čaute,
pokúšam sa vypísať všetky logy jedného užívateľa, vyzerá to u mňa
nejako takto:
model:
function getUserLog($username)
{
return $this->db->table('search_log')->where('user', $username)->fetch();
}
presenter:
function renderDetail($id, $username)
{
if (!$id) {
$this->error();
}
$this->template->userInfo = $this->facade->detailbyId($id);
$this->template->userlogs = $this->facade->getUserLog($username); //Toto je userlog
}
latte:
<tr n:foreach="$userlogs as $log">
{dump $log}
<td>{$log->user}</td>
<td class="center">2012/03/01</td>
<td class="center">Member</td>
<td class="center">
<span class="label label-success">Found</span>
</td
</tr>
Chápem, že chyba znamená, že sa snažím pracovať s niečom ako s objektom aj keď to objekt nie je no príde mi, že by mi to objekt vraciať malo. Skúsil som ešte dump log:
array (1)
"$log" => 1
Mohol by mi niekto poradiť čo robím zle?
Editoval Andurit (26. 3. 2015 14:13)
- David Matějka
- Moderator | 6445
fetch()
vraci jeden radek. Kdyz chces iterovat nad celym
vysledkem, vrat Selection (tedy smaz ->fetch()
)
- David Matějka
- Moderator | 6445
fetchAll provede ihned dotaz a vrati pole radku. Bez toho ti to vrati selection, ktery je lazy (dotaz se provede az pri iteraci) a u ktereho muzes aplikovat dalsi fce (napr v presenteru aplikujes limit). Ve vetsine pripadu je lepsi vratit selection (prave kvuli lazy), fetchAll se hodi, kdyz potrebujes treba vysledek prohnat skrz array_map
- n.u.r.v.
- Člen | 485
aha, já právě ve většině případů používám kombinaci select kde vyjmenuji co chci vypsat a fetchAll. Pak to proženu foreachem v latte.
Tedy když předem vím co vypsat, vím že je x záznamů a budu to vypisovat v cyklu v latte – je lepší použít fetchall nebo ne? Co je rychlejší/efektivnější
Editoval n.u.r.v. (27. 3. 2015 9:58)
- David Matějka
- Moderator | 6445
jak rikam, fetchAll neni lazy. Pokud bys mel tedy treba v sablone obaleny vypis cache makrem, tak u selection by se ten dotaz ani neprovedl.