Entity manager(D2) v nette presenteru, prosím o help :)
- snazimse
- Člen | 43
Zdravím,
mám takový problém, nějak jsem nenačetl jak entitymanager používat
v nette, nebo jsem to nepochopil.
Mám nasledující problém, injektuji si entitymanager v presenteru a pak je
předávám do daných entitných tříd(modelů v nette).
Ale dělá mi to problém, když chci změnit entitu, např tabulku to bere pořád z té předešlé,atributy se měni, nevím jak to moc řešit.
v Presenteru
/**
* @inject
* @var \Kdyby\Doctrine\EntityManager
*/
public $EntityManager;
dále předání do Modelu entity Doctrine2:
public function getArticlesModel()
{
if (!is_object($this->EntityManager)) {
throw new UnexpectedValueException("Není injeknutý Entity Manager !", 0);
}
return new Articles($this->EntityManager);
}
Děkuju všem za reakce!
- Mysteria
- Člen | 797
Co přesně myslíš tím
když chci změnit entitu, např tabulku to bere pořád z té předešlé,atributy se měni
?
Jinak ta metoda getArticlesModel je úplně zbytečná, tohle by za tebe měl řešit DI container:
- Přidat do config.neon třídu Articles jako service
- Smazat metodu getArticlesModel()
- Injectovat si přímo articleModel do presenteru (stejně jako jsi tam doteď měl ten Entity Manager) a ten začít používat
- Tomáš Votruba
- Moderator | 1114
Psal jsem to sice na míru Symfony, ale v Nette je princip podobný: Jak na repository as service
Až si vytvoříš ArticleRepository
, můžeš si ho injectnout
nebo lépe přes constructor injection v presenteru.
- snazimse
- Člen | 43
Mysteria napsal(a):
Co přesně myslíš tím
když chci změnit entitu, např tabulku to bere pořád z té předešlé,atributy se měni
?Jinak ta metoda getArticlesModel je úplně zbytečná, tohle by za tebe měl řešit DI container:
- Přidat do config.neon třídu Articles jako service
- Smazat metodu getArticlesModel()
- Injectovat si přímo articleModel do presenteru (stejně jako jsi tam doteď měl ten Entity Manager) a ten začít používat
Jj chápu já jsem měl jinou představu, chtěl jsem mít všechny metody
používající Entity manager v tom modelu.
Takže jsem to dělal tak, že v modelu jsem si udělal metodu
public function doctrine_ORM_RepositoryById($id=false) {
return $this->em->getRepository(get_class($this))->find($id ?: $this->id);
}
, je to asi zbytečné, původně jsem si totiž představoval
, že si udělám nějakou obecnou třídu, obecný model a budu měnit jen
třídu, kde jsou entity v tom obecném modelu a budu moc si vytáhnout
jakýkoliv repozitář a nemusím to všechno dělat v presenteru, ale je to
asi nesmysl. Ani mi to nějak nešlo…
Tak nějak s tím manipuluju blbě, moc o tom nevím…
Když tam dělám složitější dotazy do databáze, tak jsem to chtěl mít
mimo presenter, jenže mít metody bokem je třeba entity manager, do těch
modelů, se to zase blbě implementuje a v presenteru to zase nebude
fungovat :(
Ale hádám, že správně, bych tam měl mít jen čistou entitu jako Model a všechno provádět v presenteru, tedy i to getRepository všechny operace nad Entity managerem atp.
Asi bych prostě měl dodržovat osvědčený správný postup, jinak se dostávám do sr…
Co přesně myslíš tím
když chci změnit entitu, např tabulku to bere pořád z té předešlé,atributy se měni
?
To nevím, asi něco dělám blbě…