„Cannot read an undeclared property DibiResult::$DateAdded“ (a nedává mi smysl proč)
- Midnight
- Člen | 3
bré ráno přeji, verze nette 0.9.3, php 5.2, nebude to podstatný, ale prej to mám uvést :)
Takže mám EquilibriumPresenter se dvěma view, jedno je viewList, druhé viewDetail, v podstatě obdoba seznamu příspěvků v blogu (list) a detailu příspěvku s komenty k němu (detail). Oba táhnou data příspěvku z modelu EquilibriumManager (viewList používá getList, viewDetail používá getEqui) který vypadá takhle:
<?php
class EquilibriumManager
{
public function getList($offset = 0)
{
return dibi::query("SELECT swEquilibrium.*, swUsers.Status FROM swEquilibrium
LEFT JOIN swUsers ON swEquilibrium.Owner = swUsers.Username ORDER BY DateAdded DESC LIMIT 10 OFFSET $offset;")->setRowClass("Equilibrium");
}
public function getEqui($id)
{
return dibi::query("SELECT swEquilibrium.*, swUsers.Status FROM swEquilibrium
LEFT JOIN swUsers ON swEquilibrium.Owner = swUsers.Username
WHERE swEquilibrium.ID = $id;")->setRowClass("Equilibrium");
}
}
?>
classa Equilibrium, která plní údaje do obou (list i detail) templatů je pak jenom základní stupidní
<?php
class Equilibrium extends DibiRow
{
public function __construct($arr = array())
{
parent::__construct($arr);
}
}
?>
viewList funguje v pořádku, ale jakmile se pokusím otevřít detail, najednou mi v templatu na prvním řádku který se pokusí s přiřazeného objektu dosadit data hlásí v předmětu uvedenou chybu (DateAdded je název column z tabulky). Nechápu proč, jelikož se jedná prakticky o ten samý kód i query, akorát při viewList vrací vícero záznamů a při viewDetail jenom jeden. Jako kdyby se DibiResult s jedním row nezkonvertoval na Equilibrium objekt, pokud obsahuje jen jeden záznam, nebo co, nedává mi to smysl… Jakékoliv nápady/tipy/rady vítány, děkuju.
Dodatkové, pravděpodobně nepotřebné informace:
presenter (obsahuje jěště renderList a renderDetail, obě prázdné, a pak
getModel dělanou podle tutorialu, jen vrací EquilibriumManager, a pokud
neexistuje nak ho vytvoří)
<?php
final class EquilibriumPresenter extends BasePresenter
{
private $equilibriumManager;
public function actionList()
{
$this->template->user = NEnvironment::getUser();
$this->template->equis = $this->model->getList();
}
public function actionDetail($id)
{
$this->template->user = NEnvironment::getUser();
$this->template->equi = $this->model->getEqui($id);
$this->template->comments = CommentsManager::getEqui($id);
}
}
?>
- Midnight
- Člen | 3
ah, dobře, když v getEqui za setRowClass(„Equilibrium“) přidám ->fetch(), tak už to běží, to jsem si asi mohl zkusit dřív, každopádně mi to pořád nedává smysl… jakto že když dostanu vícero výsledků (jak v případě viewList, tak stačí setRowClass a můžu to rovnou poslat do templatu a všechno funguje, ale když dostanu jenom jeden, tak musím dělat jěště fetch? přijde mi to zvláštní, nekonzistentní, asi jenom nechápu nějakou logiku která za tím je, takže budu rád když mi ji někdo vysvětlí, nebo mě nasměruje někam kde vysvětlena je, děkuju