Trying to get property of non-object in template

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Andurit
Člen | 131
+
0
-

Č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
+
+1
-

fetch() vraci jeden radek. Kdyz chces iterovat nad celym vysledkem, vrat Selection (tedy smaz ->fetch())

Andurit
Člen | 131
+
0
-

Funguje, diky moc:)

Fyasko
Člen | 106
+
0
-

Nestačí náhodou přepsat fetch() na fetchAll()?

n.u.r.v.
Člen | 485
+
0
-

No já když potřebuji jeden výsledek, tak fetch, a když víc, tak fetchAll. Ale zajímalo by mě, jaký je rozdíl mezi fetchAll a nebo když tam nedám nic. díky

David Matějka
Moderator | 6445
+
0
-

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
+
0
-

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
+
0
-

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.

n.u.r.v.
Člen | 485
+
0
-

aha, otestuji to