Doctrine Migrations s Kdyby\Doctrine – jak pristoupit EntityRepository?

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

Potrebuji se v tride migrace class VersionYYYYMMDDHHMMSS extends AbstractMigration dostat k EntityRepository, ale netusim jak to udelat?

V Symfony bych udelal implementoval implements ContainerAwareInterface a pak neco takoveho: $em = $this->getDoctrine()->getEntityManager(); $er = $em->getRepository('SomeBundle:Entity'); Jak dostat repository v migracich v Nette? Diky

Editoval simPod (19. 9. 2015 21:38)

Darkling
Člen | 35
+
0
-

Ahoj melo by stačit si definovat závislost na entity manager v konstruktoru a pak použít metodu getRepository() jak máš popsáno. Nette se samo postará o předání závislosti.

<?php
public function __construct(Kdyby\Doctrine\EntityManager $em)
    {
        $this->em = $em;
        $this->articles = $em->getRepository(App\Article::class);
    }
?>
Darkling
Člen | 35
+
0
-

Ještě nezapomenout zavolat předka
<?php parent::__construct? >

simPod
Člen | 383
+
0
-

On mi tam autowiring nefunguje z nějakého důvodu… Argument 2 passed to Migrations\ VersionYYYYMMDDHHMMSS::__construct() must be an instance of Kdyby\Doctrine\EntityManager, none given,

public function __construct(Version $version, EntityManager $em)
    {
        parent::__construct($version);
    }
Darkling
Člen | 35
+
0
-

Máš tu třídu zaregistrovanou v configu?

Darkling
Člen | 35
+
0
-

Jak vytvaris instance té třídy, mas registrované Doctrine extension?

Aurielle
Člen | 1281
+
0
-

Pokud používáš Zenify/DoctrineMigrations, můžeš použít @inject anotaci:

/** @var Kdyby\Doctrine\EntityManager @inject */
public $em;
simPod
Člen | 383
+
0
-

aha, to je krasny. Diky moc

Tomáš Votruba
Moderator | 1114
+
0
-

@simPod Na co to konkrétně potřebuješ? Možná to jde lépe.
Migrace by neměly být závislé na entity manageru, resp. stavu databáze.

Editoval Tomáš Votruba (21. 9. 2015 0:32)

simPod
Člen | 383
+
0
-

@TomášVotruba obecne jsme premysleli, jak se napojit v migracich na ostatni modely, pripadne entitymanager kvuli dropum a zpetnym migracim. Kdyz v up() dropnu columns, tak jak je v down() pri vytvoreni naplnit zpetne daty

Tomáš Votruba
Moderator | 1114
+
0
-

@simPod Toto bych řešil pomocí sql INSERT/UPDATE. Snáz to jde taky s použitím uuid.

simPod
Člen | 383
+
0
-

@TomášVotruba mno, to ale nejde uplne vzdy. samozrejme je to asi nejcistci a nejjednodussi, ale co kdyz napr. potrebuji ziskat data z externich zdroju? At uz pri up nebo down v pripade pridavani sloupecku.

Tomáš Votruba
Moderator | 1114
+
0
-

@simPod Jasně, je to vždy na zvážení a konkrétní situaci. Osobně jsem si zatím vystačil s SQL.