Třída pro práci s vlastností Entity
- David Kregl
- Člen | 52
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
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
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
@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).