Pridanie vlastnosti objektu
- Filip Procházka
- Moderator | 4668
Pokud potřebuješ dynamicky skládat properties, použij stdClass
$a = new stdClass();
$a->ahoj = "Ahoj"
nebo pole, které přetypuješ na objekt (opět vrátí stdClass)
$a = array('ahoj' => "Ahoj");
$a = (object) $a;
Nette\Object zabraňuje dynamickému deklarování properties, protože v modelech, presenterech ani v podobných třídách žádné takové prasárny dělat nemáš. Obejít to nejde.
Nehledě na to že od nějaké 5.4 je to optimalizované, takže když nadeklaruješ properties předem, tak je pak práce s třídou rychlejší.
- xrep
- Člen | 51
Trieda A je Doctrine entita, akože ja tam môžem nadefinovať vlastnosť
bez anotácie, Doctrine stĺpec nevytvorí, ale to mi nepríde zrovna rozumné,
kedže sa tá vlastnosť bude využívať v jednom prípade z XYZ.
V jednoduchosti mam produkt, objednávku, a potom M:N tabulku kde to párujem,
a tam si vediem ktorý produkt sa v ktorej objednávke objednal
kolko-krát.
Vtip je v tom že to potom potrebujem nejako napasovať do šablóny, a ku
triede produkt (trieda A) by mi stačilo pridať na tú chvilku ďalšiu
vlastnosť a to kolko krát to bolo kúpené v danej objednávke. V šablóne
by sa s tým potom pracovalo jednoduchšie.
Momentálne si vytváram si vytváram array v presenteri v ktorom napárujem
produkt a kolko-krat bol zakupeny v objednavke, a to potom vypisujem
v šablóne to je ale menej čitatelné ako $oProduct->oCnt, čo by som
dosiahol doplnením vlastnosti.
Každopádne vďaka za odpoveď
- Filip Klimeš
- Nette Blogger | 156
Jestli to chápu správně z komentáře, tak dopředu víš, že budeš potřebovat počet kusů produktu v jedné objednávce. Takže proměnnou staticky vytvořit lze.
Navíc, pokud jsem to pochopil, máš tuto informaci přímo ve vazebné M:N tabulce. Můžeš tedy přistoupit přímo k jejímu záznamu, který vybereš podle id produktu a objednávky. Pokud ne, napiš si do entity nějakou funkci, která ti to spočte, a nepotřebuješ property.
Nette ti bude házet klacky pod nohy, pokud se budeš snažit dělat věci tak, jak se dělat nemají.
Editoval Filip Klimeš (19. 4. 2015 15:02)