dibi fetchAll – přistup k objektu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
masterr
Začátečník | 141
+
0
-

Tohle chování se mi zdá dost divné:

		$article = $this->article->getArticleById($id);
		dd($article[0]);

mi vrátí toto:

DibiRow(11) ▼ {
   id => 2
   title => "wqefd" (5)
   title_seo => ""
   keywords => "esda" (4)
   desc => ""
   body => ""
   category => 0
   parent_id => 0
   gallery_id => 0
   status => ""
   author => 0
}

což je naprosto v pořádku, akorát nechápu proč mi laděnka vyhodí

Notice
Undefined offset: 0

Btw. Chci pomocí dibi vrátit pouze jeden dibi object a ne array a v tom jeden dibi object, dá se to nějak udělat? (zdá se mi, že ne). Jak k tomu můžu tedy přistupovat a proč to hází ten offset?
když tam index [0] je.

array(1) ▼ [
   0 => DibiRow(11) ►
]

Editoval masterr (21. 7. 2013 10:03)

Melmen
Člen | 132
+
0
-

Pravděpodobně chceš místo fetchAll() použít jenom fetch()

masterr
Začátečník | 141
+
0
-

JJ, ale o to až tak nejde.

Dibi vrací záznamy jako objekty DibiRow. Ty mají tu vlastnost, že k hodnotám atributů lze přistupovat dvěma způsoby – buď jako k hodnotám objektů anebo jako k asociativnímu poli.

takže by mělo jít jak $article->id tak i $article[‚id‘], ale $article->id nefunguje, proč?

DibiRow(11) ▼ {
   id => 2
   title => "wqefd" (5)
   title_seo => ""
   keywords => "esda" (4)
   desc => ""
   body => ""
   category => 0
   parent_id => 0
   gallery_id => 0
   status => ""
   author => 0
}

**Trying to get property of non-object **

Přitom to je objekt a dump mi tu hodnotu i vyhodí, ale zároven to vyhodí i ten error.

Edit:
tak už vím proč to nešlo

protože se to volalo na ,,editForm"

DibiRow(11) ►
"editForm" (8)

akorát nechápu co tam dělá ten editForm :(, jak to dám pryč?

	public function actionEdit($id)
	{
		$this->createComponentEditForm($this->article->getArticleById($id));
	}
	public function createComponentEditForm($art)
	{
		dd($art);

Editoval masterr (21. 7. 2013 14:25)

Etch
Člen | 403
+
0
-

Proč ten form neděláš klasicky:

protected function createComponentEditForm(){
	$form = new EditForm; // Jen ukázka ty si tam dej formulář tak jak potřebuješ
	return $form;
}

a hodnoty mu nenastavíš v action

public function actionEditForm(){
	$this['editForm']->setDefaults($this->article->getArticleById($id));
}

Editoval Etch (21. 7. 2013 15:00)

masterr
Začátečník | 141
+
0
-

Dost dobrý, akorát teda nevím jak mám volat tu akci té componenty, ikdyž ta se asi volá sama když volám komponentu.
Mám to ted v akci presenteru

	public function actionEdit($id){
    $this['editForm']->setDefaults($this->article->getArticleById($id));
	}


	protected function createComponentEditForm()
	{

asi to tak nechám, když v tý akci presenteru volám $this->createComponentEditForm();, tak mi to nenaplní.