Многочисленные базы данных PropelORM v1

У меня мало проблем с установкой PropelORM для работы с несколькими базами данных. Я не мог найти ничего полезного в документации.

  • Создание схем из нескольких баз данных

    Я предпочитаю сначала внести изменения в схему базы данных, а затем запустите

    $ propel-gen . reverse
    

    чтобы получить schema.xml. Что делать, если моя система состоит из более чем одной базы данных? Может ли он генерировать несколько схем? Я знаю из документации buildtime-conf.xml, которая должна быть создана, но она ничего не делает для меня.

  • Создание классов

    Скажем, я создал для разных схем blog.schema.xml и platform.schema.xml. Возможно ли:

    • имеют разные префикс класса для каждой схемы? В build.properties я могу установить propel.classPrefix, но это будет работать в глобальном масштабе для каждой схемы.

    • имеют разные названия проектов для каждой схемы? Снова в build.properties я могу установить propel.project, и это создаст определенный каталог в каталоге классов. Сейчас все классы переместятся в одно и то же место. Если я буду использовать одно и то же имя таблицы в обеих схемах, один класс перезапишет другой.

Решение, которое я могу придумать самостоятельно, состоит в том, чтобы установить 2 разных каталога для определенной базы данных, но я предпочел бы более элегантное решение.

Ответ 1

Можете ли вы отправить строку <database> на свою схему?

Пока у вас есть следующее:

<database package="blog" name="blog" defaultIdMethod="native">

Внутри вашего blog.schema.xml он должен создать для вас новый каталог. Если вы позволите пропустить lazyload для вас, вы правы, вы столкнетесь с коллизиями, поэтому я просто вручную предварительно приложил что-то к своим таблицам в schema.xml (что может быть не самым эффективным для обработки вещей).

Но вы можете сделать что-то вроде:

  • в blog.schema.xml:

     <table name="users" phpName="blogUsers" idMethod="native">
    
  • в platform.schema.xml:

     <table name="users" phpName="platformUsers" idMethod="native">
    

Это сработало для меня.