2012-03-23 17 views
9

Sto provando a generare entità dal database utilizzando i comandi della console standard come descritto nella documentazione di Symfony2 qui: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html.Come generare entità dalla vista del database con doctrine e symfony2

php app/console doctrine:mapping:convert --from-database --force yml "src/My/HomeBundle/Resources/config/doctrine/metadata/orm" 
php app/console doctrine:mapping:import MyHomeBundle yml 
php app/console doctrine:generate:entities MyHomeBundle 

Dopo questo, tutte le tabelle sono generate correttamente. Il problema è che questo non genererà entità per le viste del database. Quando aggiungo yml stesso file in src/mio/HomeBundle/Resources/config/doctrine/metadata/ORM per esempio:

UserInGroup: 
    type: entity 
    table: user_in_group_view 
    fields: 
    id: 
     id: true 
     type: integer 
     unsigned: false 
     nullable: false 
     generator: 
     strategy: IDENTITY 
    userId: 
     type: integer 
     unsigned: false 
     nullable: false 
     column: user_id 
    userGroupId: 
     type: integer 
     unsigned: false 
     nullable: false 
     column: user_group_id 
    lifecycleCallbacks: { } 

ottengo questa eccezione durante l'esecuzione php app/console doctrine:generate:entities MyHomeBundle:

Notice: Undefined index: My\HomeBundle\Entity\UserInGroup in C:\Users\ThisIsMe\Projects\SymfonyTestProject\vendor\doctrine\lib\Doctrine\ORM\Mapping\Driver\AbstractFileDriver.php line 121 

domanda simile è stata postato qui: How to set up entity (doctrine) for database view in Symfony 2

So che posso creare la classe Entity, ma speravo che potessi ottenere questo generato così se cambio la mia vista, potrei semplicemente rigenerare le classi di entità. Eventuali suggerimenti?

risposta

2

Ora si creano solo i file ORM. Devi seguire altri 2 passaggi. Ti darò i passi completi dall'inizio.

Prima di fare ciò eliminare tutti i file yml nella directory orm che erano stati creati in anticipo.

Spero MyHomeBundle è il vostro nome del bundle

1).php app/console doctrine:mapping:convert yml ./src/My/HomeBundle/Resources/config/doctrine --from-database --force 

    Symfony2 generate entity from Database 

2).php app/console doctrine:mapping:import MyHomeBundle yml 

3).php app/console doctrine:generate:entities MyHomeBundle 

Spero che questo ti aiuta.

+0

Questi sono gli stessi passaggi che ho descritto nella mia domanda e questo genera entità per tutte le tabelle non per le viste. La differenza è nel percorso di destinazione per i file yml generati. Ho provato la tua soluzione nel caso in cui non risolvesse il problema, solo le tabelle sono trasformate in entità.So che le versioni precedenti di Doctrine (e Symfony) potevano generare entità senza punti di vista. – Kosta

0

Ottenuto lo stesso problema, io uso xml invece di yml ma deve essere lo stesso.

Arrivo vostra entità orm se il nome include il percorso corretto, exemple:

<entity name="Myapp\MyrBundle\Entity\MyEntity" table="myentity"> 

perché quando ho generare i miei orm dal database il nome era così:

<entity name="MyEntity" table="myentity"> 

Così dottrina didn capisco la strada giusta

Spero di essere chiaro e questo ti aiuterà!

+0

Controllato. Ci ho pensato e ho provato una combinazione diversa senza fortuna. Ma grazie comunque. – Kosta

+0

è possibile superare l'entità UserInGroup? – Snroki

+0

il fatto è che non volevo creare entità per conto mio, ma per fare in modo che Doctrine lo facesse per me. Infine, ho creato un'entità e ora ci sto lavorando, ma la domanda rimane ancora. – Kosta

-1

Come si può vedere qui: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html il processo di reverse engineering da db a entità non è ancora completamente implementato:

"Come la documentazione strumenti Dottrina dice, reverse engineering è un processo di una volta per iniziare su un progetto Doctrine è in grado di convertire circa il 70-80% delle informazioni di mappatura necessarie in base a campi, indici e vincoli di chiavi esterne: Doctrine non può scoprire associazioni inverse, tipi di ereditarietà, entità con chiavi esterne come chiavi primarie o operazioni semantiche su associazioni come eventi a cascata o del ciclo di vita: in seguito sarà necessario un ulteriore lavoro sulle entità generate per progettare ciascuna per adattarsi al modello di dominio sp ecificities ".

Problemi correlati