Třída pro práci s vlastností Entity

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

Ahoj,

mám entitu PostTraining, která dědí od entity Post.

/**
 * @ORM\Entity
 */
class PostTraining extends Post
{
    const TRAINING_PLACE = 'trainingPlace';
	…

    /**
     * @return string
     */
    public function getType()
    {
        return parent::TYPE_TRAINING;
    }
	…


    /**
     * @return null
     */
    public function getTrainingPlace()
    {
        return $this->getMeta(self::TRAINING_PLACE);
    }
	…

    /**
     * @param $type
     */
    public function setTrainingType($type)
    {
        $this->updateMeta(self::TRAINING_TYPE, $type);
    }
	…

TRAINING_TYPE a další vlastnosti jsou reprezentovány ve sloupci meta v Entitě post jako JSON. Tento sloupec je obsluhován metodou GetMeta() a SetMeta() ve třídě Post.

{
	"date":"2016-04-13 17:20:33",
	"trainingType":"1","trainingPlace":"SpaceGym, Kladno",
	"trainingDuration":"3600",
	"exercises":[
		{
		"name":"Cvik #1",
		"notice":"4x5 20Kg"
		},
		{
		"name":"Cvik #2",
		"notice":"4x10 80Kg"
		}
	]
}

Chtěl bych, aby třída PostTraining měla vlastnost $exercises, která bude obsluhována nějakou pomocnou třídou s metodami setName(), setNotice(), getName() a getNotice().

Každá instance třídy PostTraining může mít neurčitý počet cviků včetně žádného.

Jak ji vytvořím, abych s ní mohl pracovat už ve chvíli, kdy existuje instance třídy PostTraining? Má to být taky entita? (myslím, že nemusí)

Představuji si, že bych ve třídě PostTraining měl property $exercises, která by byla pole jednotlivých instancí třídy Exercise (moje budoucí pomocná třída). Ale nevím, jak svou myšlenku převést do kódu, aby to bylo košér a podle nějakých zavedených konvencí.

Děkuji.

Editoval David Kregl (27. 11. 2016 22:51)

F.Vesely
Člen | 369
+
0
-

Proc to proboha mas jako JSON v nejakem Meta? Timhle si rozhodne praci neulehcis, akorat si hazis klacky pod nohy. Ted resis mapovani JSONu na promenne a relace, za chvili budes resit vyhledavani, pak razeni, ruzne agreagace, atd. Radim ti, zkus nad tim zapremyslet znovu, vykasli se na nejake Meta promenne a udelej si to pekne objektove, dokavad jsi na zacatku.

David Kregl
Člen | 52
+
0
-

A co když jsem si jistý, že s těmi daty nebudu dál pracovat? Jde mi jen o tu třídu Exercises.

Děkuji

ZahorskyJan
Člen | 59
+
+1
-

@DavidKregl myslím, že f.vesely se tím snažil naznačit, že by ta „pomocná třída“ měla být entita s asociací na tu entitu PostTraining. Potom property $excercises bude ArrayCollection s entitami Excercise a v ní už můžeš dělat set/get jak potřebuješ. Cokoliv jiného si myslím, že nespadá do původně dotazovaných „zavedených konvencí“. Pokud nechceš aby to byly entity, tak pracuj s obyčejným polem, které budeš do entity serializovat (v tomto případě asi rychlejší než json).