Multiplier >setDefaultValue

vanaveno
Člen | 144
+
0
-

Ahojte, řeším problém s defaultním nastavením hodnoty vytažené z databáze, hází mi to Trying to get property of non-object

Omlouvám se, ale s Multiplierem, ještě nemám zkušenosti. Hodnoty do databáze mi normálně zapisuje, ale když je chci v inputu zobrazit, hází mi to hláškuto není object. Kde dělám prosím chybu.
Děkuji za pomoc

<?php
            protected function createComponentCategoryMarge(): Multiplier
            {

                return new Multiplier(function ($categoryCatId) {

                    $marge = $this->priceManager->getMarge()->where('catId', $categoryCatId)->fetch();
                    $form = new Nette\Application\UI\Form;
                    $form->addText('margeProc', 'Marže v %:')
                         ->setDefaultValue($marge->margeProc); <-- zde je problém
                    $form->addHidden('categoryCatId', $categoryCatId);
                    $form->addSubmit('send', 'Nastav');
                    $form->onSuccess[] = [$this, 'categoryMargeSucceeded'];
                    return $form;
                });
            }
?>

Editoval vanaveno (23. 1. 2020 20:17)

Šaman
Člen | 2632
+
0
-

S Nette Database Table zas tak moc nedělám, ale není problém v tom ->fetch(); a následně $marge->margeProc? Zkoušel jsi to dumpovat? Fetch myslím vrací už hodnotu nad kterou už nejde volat property. Tedy zkus odstranit ten fetch.

Obecně si dumpni co je v tom $marge. Taky se může stát, že databáze žádnou nenašla…

Editoval Šaman (23. 1. 2020 20:57)

vanaveno
Člen | 144
+
0
-

Právě že jsem si to dumpnul a vyhazuje mi to pole všech id které iretuji v seznamu kategorií. Asi tam chce narvat celé pole, ale to nejde :) Já už mám dneska dost :o

vanaveno
Člen | 144
+
0
-

Ono to nejprve naběhne a jsou tam ty správné hodnoty, ale pak to skočí na tu škaredou červeně podbarvenou hlášku Trying to get property of non-object

Kamil Valenta
Člen | 752
+
+1
-

Zkontroluj si, jaké $categoryCatId tomu předhazuješ. Patrně tam jde i něco, k čemu priceManager žádný záznam nevrátí, ->fetch() pak vrátí false a nad ním se snažíš o ->margeProc, proto ta chyba.

Buď si zajisti, že budeš v $categoryCatId předhazovat jen platná id, nebo si to po fetch() obal do:

if ($marge) {
	...
}
galab
Backer | 74
+
+1
-

případně

->setDefaultValue($marge->margeProc ?? '');
vanaveno
Člen | 144
+
0
-

Díky bylo to ono. Některé inputy byly prázdné. Já už mám dneska dost a přitom ten samý problém, jsem řešil v něčem jiném a přišel jsem na to, ale tady už mě to nenapadne. Nic končím

Každopádně dík za pomoc, je dobře že to někomu ještě pálí aniž by do toho viděl :)

kamil_v napsal(a):

Zkontroluj si, jaké $categoryCatId tomu předhazuješ. Patrně tam jde i něco, k čemu priceManager žádný záznam nevrátí, ->fetch() pak vrátí false a nad ním se snažíš o ->margeProc, proto ta chyba.

Buď si zajisti, že budeš v $categoryCatId předhazovat jen platná id, nebo si to po fetch() obal do:

if ($marge) {
	...
}