Доктрина2 базовая;Прокси, Хранилища - PullRequest
2 голосов
/ 19 мая 2011

Я могу использовать Doctrine2, и это работает. Но я действительно не понимаю, что я делаю ..

  1. Я не понимаю, что такое прокси, я создал их все из командной строки, но они мне действительно нужны?

  2. Как работают аннотации Doctrine2? Проверяет ли файл Doctrne2 каждый раз, чтобы найти файл класса репозитория из аннотации Entity?

Я думаю, мне нужны ресурсы, чтобы понять основные принципы ORM. Проект работает, но я не уверен, что он работает так, как должен ..

Спасибо

Ответы [ 2 ]

7 голосов
/ 19 мая 2011

Хорошо, первое, что нужно понять, это то, что таблицы и отношения вашей базы данных «сопоставлены» с вашими php-сущностями. Например, у вас может быть таблица пользователей. Затем у вас будет класс php, представляющий сущность пользователя. Внутри этого класса находятся защищенные / закрытые переменные-члены, которые представляют значения в вашей таблице пользователей и взаимосвязи с другими объектами.

Doctrine получает информацию о сопоставлении из ваших файлов сопоставления. Это могут быть сами сущности, в которых информация сопоставления представлена ​​в виде аннотаций (комментариев) в ваших классах сущностей. Вы также можете полностью отделить информацию о сопоставлении от ваших классов сущностей, используя YAML или XML.

Как только ваши классы сущностей и информация о сопоставлении настроены и готовы к работе, Doctrine за кулисами создает классы Proxy. Вам не нужно создавать их, так как вы можете настроить D2 для их автоматического создания. Прокси-классы предоставляют доступ к вашим сущностям через наследование и являются обязательной частью Doctrine 2, без них вы не могли бы получить доступ к данным сущностей.

Другая вещь, которую нужно запомнить, - это единица работы. Когда вы получаете сущность из БД, скажем, от пользователя, единица работы (uow) содержит внутреннюю ссылку на нее. Если затем вы внесете изменения в сущность, сохраните и очистите ее, Uow вычислит разницу между полученной от БД и возвращаемой и вычислит sql, необходимый для выполнения задания.

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

EDIT

Чтобы ответить на ваш второй вопрос, да Doctrine проверяет вашу картографическую информацию при каждом запросе. Это, очевидно, замедлит выполнение. Однако при работе вы можете включить кэширование метаданных с помощью одного из драйверов (ApcCache, MemcachCache и т. Д.). Это тогда не становится проблемой. Стоит также отметить, что D2 поддерживает 3 типа кэширования: метаданные, запрос (преобразование DQL) и результат (кэширование результатов базы данных). Все они настраиваются с помощью разных драйверов кеша.

0 голосов
/ 19 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...