Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

#1 před 5 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Tak jsem se konečně dokopal k tomu hodit to na GitHub :-)

Celé toto řešení je trvořeno jako extension pro nový Dependency Injection Container.

Dokumentace

http://doc.nellafw.org/…ons/doctrine

Sandbox

Hotový a připravený sandbox najdete na GitHubu

Nějáké nápady na změnu / vylepšení?

Changelog

v1.0

init

v2.0
  • config sections
  • Nette 2.0 stable
  • Doctrine 2.2.0
v2.1
  • Nette 2.0.1 stable
  • Doctrine 2.2.1
  • namespace Addons → NetteAddons
v2.2
  • Nette 2.0.2
  • Symfony Console 2.0.12
  • new config

Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#2 před 5 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Btw co takle založit na http://addons.nette.org novou sekci „Extensions“ ?


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#3 před 5 měsíci

bazo
Nette guru
Registrovaný: 28. 9. 2009
Příspěvky: 303

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

dal by sa spravit taky sandbox aj pre mongo ODM?

 

#4 před 5 měsíci

newPOPE
Nette guru
Registrovaný: 4. 6. 2009
Příspěvky: 280

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

bazo napsal(a):

Hi, nieco mam rozrobene. Akurat je to pre verziu ktora je v /download (vyhradne pouzivam len tie :-))

Mohol by som to v dohladnom case dat von aspon v akom takom stave :-D. Ostatni to pomocou pull-requestov doladia :-)

 

#5 před 4 měsíci

mbskot
Člen
Registrovaný: 7. 1. 2011
Příspěvky: 59

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Patrik Votoček: sorry ak sa sprosto pýtam, ale prečo je pre entity východzie miesto [%appDir%]?
Ja som ich mal doteraz v App\Model\Entities a podobne som mal Repositories. Je to zlé? Ak hej, aká je doporučená adresárová štruktúra pre súbory Doctrine a kde by mala byť umiestnená?

 

#6 před 4 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

@mbskot: rozhodně není špatně to co používáš ale právě kvůli tomu že každý používá jinou adresářovou strukturu je výchozí místo nastaveno tak jak je. Doctrine totiž neprochází jenom složku kterou jí zadáš ale i všechny její podsložky.

Já třeba vzhledem k modularitě systému nemám pouze jednu složku se všemy entitamy. Ale mám je roztroušené po celém projektu tak aby byly součástí celku kterého se týkají.


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#7 před 4 měsíci

mbskot
Člen
Registrovaný: 7. 1. 2011
Příspěvky: 59

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

@Patrik Votoček pri použití nového „Nette Framework 2.0-rc2 pro PHP 5.3“ treba zmeniť volanie funkcie v
Nella\Doctrine\Panel, riadok: 69

Connection::highlightSql($sql)  -->  Nette\Database\Helpers::dumpSql($sql)

Editoval mbskot (27. 1. 11:54)

 

#8 před 4 měsíci

StiFF.cz
Nový člen
Registrovaný: 22. 9. 2011
Příspěvky: 8

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Zkouším zprovoznit Doctrine2 na tomto sandboxu. Mám definované entity i anotace na nich, ale stále mi to hlásí při pokusu o vytvoření schématu tuto hlášku „No Metadata Classes To Process“. Přitom cesty k entitám jsem si upravil podle své vlastní struktury.
Věděl by někdo, čím to může být?

EDIT: namespace :)

Editoval StiFF.cz (31. 1. 16:51)

 

#9 před 3 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Release 2.0

nová verze je na githubu https://github.com/…rine-sandbox

upravil jsem první post


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#10 před 3 měsíci

llook
Člen
Registrovaný: 17. 2. 2005
Příspěvky: 114

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Edit: Tak už jsem na to přišel. Neinvaliduje se to samo, protože to v CLI nerozpozná vývojový režim. $configurator->isProductionMode() vrací true.

Přidal jsem si tedy do bootstrapu tohle:

if (PHP_SAPI == 'cli') {
        $configurator->setProductionMode(false);
}

Editoval llook (11. 2. 14:58)

 

#11 před 3 měsíci

Dalibor
Člen
Registrovaný: 24. 6. 2011
Příspěvky: 29

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

kdyby někdo jako já zatuhnul na tom, že Console při zadání

php www/index.php help

nevypisuje volby pro ORM a další (orm:generate-proxies apod.), tak stačí volat bez help ;-)

php www/index.php

a já dvě hodiny hledám, proč se mi neregistrují extensions :-(

Patrik: díky za tento sandbox..

 

#12 před 3 měsíci

bazo
Nette guru
Registrovaný: 28. 9. 2009
Příspěvky: 303

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

za help treba napisat meno prikazu, zoznam prikazov sa zobrazi index.php list

 

#13 před 3 měsíci

Dalibor
Člen
Registrovaný: 24. 6. 2011
Příspěvky: 29

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

bazo napsal(a):

za help treba napisat meno prikazu, zoznam prikazov sa zobrazi index.php list

Jo, ale když napíšeš jen „php index.php help“ tak, jak to je v readme, tak ti vyjedou jen příkazy pro Symfony..

 

#14 před 3 měsíci

Quinix
Člen
Registrovaný: 31. 3. 2009
Příspěvky: 33

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

nakonfiguroval jsem si rozšíření podle návodu, ale když teď zkusím app spustit, dostanu:

Doctrine\Common\Annotations\AnnotationException
[Semantical Error] The annotation „@MappedSuperClass“ in class BaseEntity was never imported. Did you maybe forget to add a „use“ statement for this annotation

config.neon:

common:
    parameters:
        database:
            driver: pdo_mysql
            dbname: app
            host: localhost
            user: root
            password:
            charset: utf8
            collation: utf8_czech_ci
    doctrine:
        connections:
            default: %database%
        entityManagers:
            default:
                entityDir: %appDir%
                proxyDir: %tempDir%
                proxyNamespace: Model\Proxies
                connection: default
        console:
            entityManager: default
    services:
        console: @doctrine.console
        entityManager: @doctrine.entityManagers.default

Předtím jsem na vytvoření entity managera používal:

<?php
public static function createEntityManager($doctrine) {

        $config = new Configuration();
        $config->setProxyDir($doctrine['proxyDir']);
        $config->setProxyNamespace($doctrine['proxyNamespace']);

        $metadataDriver = $config->newDefaultAnnotationDriver($doctrine['entityDir']);
        $config->setMetadataDriverImpl($metadataDriver);
        $cache = new ArrayCache();

        $config->setMetadataCacheImpl($cache);
        $config->setQueryCacheImpl($cache);

        $eventManager = new EventManager();

        $eventManager->addEventSubscriber(new CacheSubscriber());
        // Vytvoření samotného EntityManageru
        $entityManager = EntityManager::create((array) $doctrine['connection'], $config, $eventManager);
        $config->setSQLLogger(Doctrine2Panel::getAndRegister($entityManager));
        return $entityManager;
    }
?>

Kde může být chyba?

 

#15 před 3 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Ve výchozím nastavení je tento sandbox nastaven na prefix Doctrine anotací viz:
https://github.com/…els/User.php

Pokud chceš používat anotace bez prefixu mělo by stačit přidat:

common:
    doctrine:
        entityManagers:
            default:
                useAnnotationNamespace: true

Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#16 před 3 měsíci

Tomáš Kolinger
Nový člen
Registrovaný: 29. 2. 2012
Příspěvky: 7

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Stáhnul jsem si sandbox ale bohužel nemůžu rozchodit CLI rozhraní. Jak jsem dohledal, tak se údaje z neonu neberou a jsou tam nastaveny na výchozí hodnoty (prázdné heslo, prázdné jméno, …). Výchozí připojení (doctrine.connections.default) se předá ale pole %database% se ignoruje, nevím proč.

Samotná aplikace přes HTTP funguje a na server se připojí.

Editoval Tomáš Kolinger (29. 2. 12:36)

 

#17 před 3 měsíci

pilec
Nette guru
Registrovaný: 12. 11. 2009
Příspěvky: 495

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

nemáš náhodou přístupové údaje k databázi v development/production? při přístupu přes konzoli se berou data ze sekce console


Nejčastější problémy: voláš parent::__construct()? Vymazal jsi cache?

 

#18 před 3 měsíci

Tomáš Kolinger
Nový člen
Registrovaný: 29. 2. 2012
Příspěvky: 7

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Dával jsem údaje přímo do „common“ sekce a zkusil jí importovat/podědit do „console“ (console < common) ale nepomohlo.

Editoval Tomáš Kolinger (29. 2. 17:24)

 

#19 před 3 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

od nette 2.0.x sekce „console“ neexistuje. Musíš „natvrdo“ definovat prostředí při $configurator->addConfig(..., 'production'); (jedná se o vlastnost Nette nikoliv tohoto pluginu).


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#20 před 3 měsíci

knyttl
Nette guru
Registrovaný: 3. 4. 2010
Příspěvky: 226

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Ahoj,

možná jsem trochu natvrdlej, ale kde a jak získáváš entityManager? :-) V tomhle příkladu, jak to běží celé v pozadí Usera, tak to úplně zřejmé není.

 

#21 před 2 měsíci

Tomáš Kolinger
Nový člen
Registrovaný: 29. 2. 2012
Příspěvky: 7

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Chybějící registrace existujících migrací (registerMigrationsFromDirectory()) u konfigurace pro migrace je úmyslná? Pracuji s migracemi poprvé, jak bez tohoto zaregistrování použiji vytvořenou migraci?

 

#22 před 2 měsíci

Patrik Votoček
Nette Evangelist
Registrovaný: 8. 3. 2008
Příspěvky: 2122

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

@knyttl: $container->doctrine->entityManager->default resp delam si alias https://github.com/…/config.neon#L43 $container->database

@Tomáš Kolinger: bug opraveno


Sorry my bad english.
Vrtak-CZ | Nella Project | Osobní Blog | Twitter | LinkedIn | GitHub
„Nastala chyba která neměla nastat“ aneb „Když se chce všechno jde.“

 

#23 před 22 dny

hapi
Nový člen
Registrovaný: 30. 4. 2012
Příspěvky: 4

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Dobrý večer,
začínám s nette a doctrine 2, potřeboval bych globálně nastavit prefixy tabulek.
V doctrine 2 to lze pomocí listeneru viz. dokumentace, v dokumentaci nella je informace o možnosti nastavení tagu doctrineListener.

Bohužel je to pro začátek relativně dost informací. Mohl by mi, prosím, někdo mi poradit, jak globální prefixy nejlépe nastavit?

Předem děkuji

Editoval hapi (30. 4. 23:46)

 

#24 před 22 dny

Acnnair
Člen
Registrovaný: 29. 6. 2009
Příspěvky: 32

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Myslím, že takéto niečo by mohlo fungovať (neskúšal som).

config.php

parameters:
        tablePrefix: myprefix_

services:
        doctrineTablePrefixListener:
                class: DoctrineExtensions\TablePrefix
                arguments: [%tablePrefix%]
                tags: [doctrineListener]

S tým, že nezabudni nakopírovať triedu DoctrineExtensions\TablePrefix niekam kde ti to tvoj autoloader nájde.

Online

 

#25 před 21 dny

hapi
Nový člen
Registrovaný: 30. 4. 2012
Příspěvky: 4

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

to jsem si taky myslel, bohužel pokud zkusím vypsat
die(var_export($container->findByTag(‚doctrineListener‘), true));
v Nella\NetteAddons\Doctrine\Config\Extension::createEventManager
vrací se mi prázné pole…

 

#26 před 10 dny

llook
Člen
Registrovaný: 17. 2. 2005
Příspěvky: 114

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Ta třída musí implementovat \Doctrine\Common\EventSubscriber. Když vezmeš ten příklad z dokumentace a takhle ho upravíš, tak by to mělo fungovat:

namespace DoctrineExtensions;
use \Doctrine\ORM\Event\LoadClassMetadataEventArgs;

class TablePrefix implements EventSubscriber
{
    protected $prefix = '';

    public function __construct($prefix)
    {
        $this->prefix = (string) $prefix;
    }

    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
    {
        $classMetadata = $eventArgs->getClassMetadata();
        $classMetadata->setTableName($this->prefix . $classMetadata->getTableName());
        foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
            if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY) {
                $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
                $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
            }
        }
    }

    /**
     *
     * @return array
     */
    public function getSubscribedEvents()
    {
        return array(\Doctrine\ORM\Events::loadClassMetadata);
    }
}

Config:

services:
  doctrineListener_identifiersEnvelope:
      class: DoctrineExtensions\TablePrefix('haf_')
      tags: [ doctrineListener ]

 

#27 před 10 dny

hapi
Nový člen
Registrovaný: 30. 4. 2012
Příspěvky: 4

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

diky za odpoved, ted mam jinou praci, ale az to vyzkousim, dam vedet :)

 

#28 před 8 dny

hapi
Nový člen
Registrovaný: 30. 4. 2012
Příspěvky: 4

Re: Doctrine 2 ORM & Migrations plugin a sandbox pro Nette 2.0 Beta 2 (s novým DIc)

Tak jsem se konecne dostal k tomu, to vyzkouset a funguje to skvele :)

v prikladu v dokumentaci doctrine neni implementovano rozhrani, to byl ten problem :)

Dekuju za rady

 

Zápatí