Zend 1.11 и Doctrine 2 Auto генерируют все необходимое из уже существующей базы данных - PullRequest
5 голосов
/ 26 июля 2011

Я новичок в ORM и очень заинтересован в его изучении. Мне удалось установить все классы и конфигурации для Doctrine 2.1 с Zend 1.11.x, следуя этому руководству.

http://www.zendcasts.com/unit-testing-doctrine-2-entities/2011/02/ Который использует плагин Bisna и сценарии доктрины.

Теперь моя проблема в том, что он четко объясняет, как создавать сущности и таблицы с помощью классов доктрин, но не объясняет, как автоматически генерировать прокси и классы репо из уже существующей базы данных, что помогает мне выбирать, вставлять и обновлять. Я всегда создаю свои базы данных, используя MySQL Workbench.

Я также следовал приведенному ниже уроку

http://www.zend.com/en/webinar/Framework/70170000000bSrG-webinar-zf-v-1-doctrine-v-2-20101214.flv

Моя база данных настолько сложна, что отношения пересекаются всеми возможными способами. Если я буду следовать инструкциям, описанным в этих руководствах, я никогда не завершу свой проект. Может ли кто-нибудь объяснить, пожалуйста, как начать использовать Doctrine после настройки. Учитывая, что у меня уже есть база данных и мои папки с моделями пусты. У меня есть структура папок, как показано ниже.

    C:/zf/library/Doctrine
    C:/zf/library/Symfony
    C:/zf/library/ZC -- (my model which should contain the proxies and repo of Doctrine. At the moment it contains nothing.)
    C:/zf/library/Zend
C:/zf/scripts/doctrine.php

Пожалуйста, помогите мне!

Я вчера отправил это же сообщение, и никто не ответил на мое сообщение. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация от меня.

Спасибо,

Karthik

Ответы [ 3 ]

4 голосов
/ 02 ноября 2011

Согласно Doctrine, вы должны сначала создать свои сущности, а затем создать схему базы данных из этих сущностей.

Но поскольку у вас уже есть база данных, вы, вероятно, этого не хотите. Возможно преобразовать вашу базу данных в сущности Doctrine2 на PHP, XML или Yaml.

Вам следует внимательнее взглянуть на инструменты командной строки, которые предлагает Doctrine с помощью клея Bisna, потому что там вы можете создавать множество вещей.

Чтобы сгенерировать ваши сущности из вашей базы данных, рассмотрите следующую команду:

php doctrine.php orm:convert-mapping --from-database php ../library/Application/Entity

Вы также можете определить пространство имен и базовый класс, который должны расширяться вашими сущностями: --namespace = namespace и --extends = class.

Doctrine2 предупреждает вас о необходимости преобразования вашей базы данных в сущности, поскольку не все может быть автоматически обнаружено или поддержано. Например, типы данных ENUM по умолчанию не поддерживаются в Doctrine2, поэтому преобразование вашей базы данных вызовет ошибку.

Это хорошая идея, чтобы проверить все ваши сущности, особенно ассоциации, прежде чем использовать их. Надеюсь, это поможет вам.

2 голосов
/ 02 ноября 2011

Если я правильно понимаю ваш вопрос, у вас уже настроены сущности, и вам нужно автоматически сгенерировать прокси и классы хранилища.

Оба могут быть созданы с помощью следующих команд командной строки Doctrine из корневого каталога вашего приложения:

php scripts/doctrine.php orm:generate-proxies

php scripts/doctrine.php orm:generate-repositories library/

Если вы ищете способ автоматически сгенерировать классы сущностей, к сожалению, я не думаю, что решение для этого пока доступно.

Представитель службы поддержки в ORM Designer сказал, что они "работают" над этой функцией и что она "очень востребована". Мы надеемся, что он будет включен в ORM Designer 2.0, поскольку в классах сущностей кодирования / отображения, как правило, много повторяющихся работ, которые, вероятно, могут быть автоматизированы.

1 голос
/ 02 ноября 2011

Вы можете использовать команду orm:generate-entities, если вы предоставляете информацию о сопоставлении в формате XML или YAML.

См. http://www.doctrine -project.org / docs / orm / 2.1 / en / reference/tools.html#entity-generation

Для разработки установите автоматическую генерацию прокси в своей конфигурации, в противном случае используйте команду orm:generate-proxies.

Если вам не нужно настраиватьваши репозитории, общие создаются в диспетчере сущностей по запросу.Чтобы указать собственные репозитории, просто используйте атрибут сопоставления сущностей repository-class.

См. http://www.doctrine -project.org / docs / orm / 2.1 / en / reference / xml-mapping.html # defining-an-entity для примера

...