Generowanie pojedynczego encji z istniejącej bazy danych przy użyciu symfony2 i doctrine
Czy możliwe jest wygenerowanie pojedynczego encji z bazy danych przy użyciu narzędzia konsoli Symfony2?
W trakcie kodowania musiałem dodać tabelę i wprowadzono modyfikacje do istniejących klas encji. Więc nie chcę, żeby wszystkie moje byty zostały zregenerowane.
Wszelkie sugestie będą mile widziane!
9 answers
Miałem ten sam problem, musisz zrobić tak:
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Yourtablename"
Then
php app/console doctrine:mapping:import AppMyBundle \
metadata_format --filter="Yourtablename"
Gdzie metadata_format
jest zakończeniem pliku, który chcesz wygenerować (np. xml, yml, adnotacja)
I wreszcie
php app/console doctrine:generate:entities AppMyBundle --no-backup
Tak jak ta doktryna załaduje tylko byt, którego potrzebujesz. Po prostu uważaj na filtr musisz użyć CamelCase !
Mam nadzieję, że to ci pomoże
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-29 09:32:12
Dla trzeciego polecenia, doctrine regenerował wszystkie pliki encji. Dodając nazwę encji po pakiecie, wygenerowano tylko encję, którą byłem zainteresowany.
php app/console doctrine:generate:entities AppMyBundle:Yourtablename --no-backup
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-02 21:05:36
Proste rozwiązanie dla opcji Symfony 2.7 oraz dla [/xml/yml] zobacz http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
Wykonaj 3 polecenia w 3 krokach:$ php app/console doctrine:mapping:import --force AppBundle xml --filter="Meeting"
(Uwaga: jeśli Twoja nazwa bazy danych to my_meeting
, musisz zmienić ją na MyMeeting
w filter="MyMeeting"
, aby doctrine znalazł nazwę Twojej tabeli. Dzieje się tak, ponieważ doctrine zawsze usuwa podkreślniki i dodaje Wielbłąd do nazwy tabeli. Jeśli nie, otrzymasz ten błąd: "Baza Danych nie posiada żadnych informacji o mapowaniu" .)
$ php app/console doctrine:mapping:convert annotation ./src/AppBundle/Entity --from-database --filter="Meeting"
(Uwaga: upewniając się, że masz namespace AppBundle\Entity;
Jak poniżej w swoim spotkaniu .plik klasy php w ten sposób:
<?php
/**
* Created by PhpStorm.
* User:
* Date: 03-Sep-2015
* Time: 3:23 PM
*/
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
Jeśli nie dodać.)
Gdzie:
- AppBundle jest dokładnie Twoim "AppBundle" w Symfony 2.7.]}
- spotkanie jest tabelą docelową (Wielbłąd-rozróżnia wielkość liter)
Aby się upewnić, sprawdź ten katalog:
Src\AppBundle/Resources/config/doctrine / Meeting.orm.xml
I upewniając się, że tylko masz .pliki xml dla tabeli, którą chcesz utworzyć pliki klas encji, a nie inne. Następnie uruchom poniższe polecenie, aby wygenerować metody get I set dla swojej klasy encji, którą utworzyłeś wcześniej
$ PHP app / console doctrine: generate:entities AppBundle: Meeting --no-backup
NOTE2:
Jako ostatni krok należy usunąć plik XML ORM db na przykład w src\AppBundle/Resources/config/doctrine/VisitorData.orm.xml
To działa bardzo dobrze dla mnie.
Dla wyjaśnienia proszę przeczytać: http://symfony.com/doc/current/cookbook/doctrine/reverse_engineering.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-22 07:30:35
@fyrye komentarz, który jest obecnie Ukryty, zasługuje na uznanie, chciał to dodać, aby nie został pominięty przez innych. Jest to podejście:
/** @var \Doctrine\DBAL\Connection $connection */
$config = $connection->getConfiguration();
// for excluding an specific table
$config->setFilterSchemaAssetsExpression('/^(table_to_reverse_engineer_1|table_to_reverse_engineer_2).*$/');
Źródło: https://coderwall.com/p/jofhdw/doctrine-tell-which-tables-to-work-with
Miałem problemy podczas uruchamiania następującego polecenia z powodu dużej liczby źle zdefiniowanych tabel starszych
php ./vendor/bin/doctrine orm:convert-mapping --force --from-database annotation ./src/UI/Entity/
Okazuje się, że flaga --filter filtruje tylko po odczytaniu metadanych ze wszystkich tabel co, jeśli nie mają kluczy podstawowych lub mają jakiś inny problem, spowoduje, że komenda nie powiedzie się
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 10:12:39
Zostawiłbym to jako komentarz do zaakceptowanej odpowiedzi, ale jestem nowicjuszem.
Dla takich jak ja, którzy mieli problemy z przełącznikiem -- filter mapującym wiele tabel z zbieżnymi łańcuchami w nazwach, można użyć wzorca.
Przykładowe nazwy tabel:
Sprzedawca VendorContact
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="Vendor"
To polecenie przekonwertuje obie tabele, a nie tylko Vendor. Jeśli chcesz tylko Vendor, a nie VendorContact, użyj wzorca w --filter:
php app/console doctrine:mapping:convert metadata_format \
./src/App/MyBundle/Resources/config/doctrine \
--from-database \
--filter="\bVendor\b"
Hope that helps ktokolwiek!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-19 05:00:28
Działa również świetnie z Symfony 3.
Jeśli otrzymujesz " żadnych klas metadanych do przetworzenia."wiadomość spróbuj przekonwertować nazwę tablename na doctrine w parametrze filter.
"my_table_name" musi być zapisane jako "MyTableName".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-29 16:48:03
Żadna z odpowiedzi nie była dla mnie odpowiednia dla Symfony 3 . Skończyłem robiąc:
php bin/console doctrine:mapping:import --force MyBundle xml --filter="MyTable"
php bin/console doctrine:mapping:convert annotation ./src --filter="MyTable"
php bin/console doctrine:generate:entities MyBundle:MyTable --path ./src
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 22:03:15
Miałem dokładnie ten sam problem z Symfony 2.4 i MySQL.
Żadne z obejść zamieszczonych powyżej nie zadziałało dla mnie.
Skończyłem tworząc nową bazę danych z tabelami, które chcę wyodrębnić(może to być łatwe, ponieważ MySQL dostarcza skrypt tworzenia).
Następnie zmieniono połączenie z nową bazą danych i wykonano stamtąd polecenie ekstrakcji encji.
Wydaje się być trochę radykalne, ale nie będę tworzyć Bytów ręcznie.
Mam nadzieję, że pomaga
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-30 13:39:54
Nie działa żaden z nich dla mojej symfony 3.3. Więc po prostu utworzyłem kopię katalogu i ponownie wygenerowałem wszystkie encje w katalogu kopiowania. Następnie skopiowałem wymagane encje w moim oryginalnym katalogu.
-- filtr nie działa z powodu tego problemu https://github.com/symfony/symfony/issues/7717
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 05:09:03