Entity manager(D2) v nette presenteru, prosím o help :)

snazimse
Člen | 43
+
0
-

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
+
0
-

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:

  1. Přidat do config.neon třídu Articles jako service
  2. Smazat metodu getArticlesModel()
  3. 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
+
0
-

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
+
0
-

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:

  1. Přidat do config.neon třídu Articles jako service
  2. Smazat metodu getArticlesModel()
  3. 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ě…