2016-03-02 2 views
1

Я недавно установил Doctrine2 на своем веб-сервере и все отлично работает. Я настроил все мои сущности, но теперь я нахожусь в точке, где хочу создать таблицу поиска, и я немного смущен, как это сделать. Я хочу, чтобы таблица, которая выглядит следующим образом:Создайте таблицу поиска с Doctrine2

tbl_Role      tbl_User 
+--------+----------+   +--------+----------+--------------+----------+ 
| id | Name |   | id | Name | Password | Role | 
+--------+----------+   +--------+----------+--------------+----------+ 
| 1 | Admin | 
| 2 | User | 
| 3 | Free | 
+--------+----------+ 

Между Role и User таблицы состоит в OneToMany соотношение (один Role имеет много Users), и эта таблица не изменится в будущем. Я не хочу использовать Enums из-за проблемы с обновлением или исправлением с ними (если все-таки что-то изменилось)

Мой вопрос в том, как я могу представить эту таблицу поиска как объект Doctrine? Обычно, если я хочу создать новый User, я должен получить установку Role из базы данных и установить ее как ссылку в объекте User. Мне это кажется немного дорогим. Было бы здорово, если бы у меня были только ID Role в статических полях PHP, поэтому я могу установить их как ссылку для User. Это возможно?

Другая проблема заключается в том, как получить значения поиска в базе данных. Могу ли я реализовать метод в самом сущности Role, который выполняется после создания таблицы Role? Таким образом можно было бы пометить конструктор как закрытый, и все значения будут присутствовать после миграции.

+0

Вы знаете о ссылках на Доктрину? https://github.com/doctrine/doctrine2/blob/2.2/lib/Doctrine/ORM/EntityManager.php#L374-413. Учитывая фактический идентификатор базы данных роли, получение ссылки на доктрину является недорогим. У меня все равно возникнет соблазн просто сохранить роль как строку и вообще не иметь отношения «Доктрина 2». Вы можете создать таблицу ролей для другого программного обеспечения, если хотите. – Cerad

ответ

1

Прежде всего, это не будет слишком дорого, потому что Doctrine2 has a few cache layers и эти запросы будут эффективно кэшироваться, так как таблица Role не изменится.

В любом случае, если таблица Role не изменится, я не уверен, ее следует хранить в базе данных. Вы можете создать «статический» заводской сервис для создания простых объектов значения как части вашего домена.

+0

Я думаю, что понимаю, что вы имеете в виду, но я хотел бы иметь эту таблицу в базе данных. Это очень важное отношение, и если вы смотрите только на базу данных (без фабрики), у вас нет ссылок на целые числа, если эта таблица недоступна. Это концепция дизайна, и я неохотно хотел ее сломать. – Cilenco

+0

Ну, вы должны проектировать свое программное обеспечение, а не базу данных. DB - это просто ввод-вывод. В любом случае, как упоминалось в ответе, это не должно быть проблемой из-за уровня кэширования Doctrine. –

Смежные вопросы