Проект Symfony с моделями, хранящимися в нескольких базах данных - PullRequest
2 голосов
/ 03 июня 2011

Я пишу проект Symfony (использующий версию symfony 1.4 с Propel в качестве ORM), в которой некоторые данные хранятся в базе данных MySQL, а некоторые другие хранятся на другом сервере в базе данных PostgreSQL.

Чтобы быть более точным, я хочу хранить некоторые модели в базе данных MySQL и другие модели в базе данных PostgreSQL одновременно и делать это без явного переключения базы данных (я имею в виду, что Propel будет использовать правильное подключение к базе данных и диалект SQL для извлечения / хранения данные). Модели из части MySQL не будут иметь отношения с PostgreSQL.

Возможно ли это? Если да, я также хотел бы знать, как настроить среду разработки (я хочу получить доступ к различным базам данных MySQL / PostgreSQL в среде разработки и в производственной среде).

UPD: я нашел вопрос о том, как SO решает эту проблему: Поддержка нескольких баз данных в Symfony Но я должен проверить, работает ли он с последними версиями Symfony.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Я работаю с Symfony каждый день, и на самом деле вы можете иметь 2 базы данных для хранения несвязанных частей модели.Вам нужно настроить оба соединения в вашем database.yml (я не знаком с posgress, поэтому вам придется выяснить, как настроить его правильность):

  mysql_connection:
    class:        sfPropelDatabase
    param:
      phptype:    mysql
      classname:  MysqlPropelPDO
      dsn:        ''
      username:   user
      password:   pass
      encoding:   UTF-8
      pooling:    true

  postgress_connection:
    class:        sfPropelDatabase
    param:
      phptype:    postgres
      classname:  PostgresPropelPDO
      dsn:        ''
      username:   user
      password:   pass
      encoding:   UTF-8
      pooling:    true

Как только вы это сделаете, мыследует начать с файла или файлов schema.yml (так как вы будете использовать 2 базы данных, я бы предложил иметь 2 файла, один для mysql, а другой для базы данных postgres):

mysql_schema.yml:

//This is how you tell witch connection you are using for this tables
connection: mysql_connection 

classes:
  CLassName:
    tableName: table_name
    columns:
      id:
      name:
        type: varchar(255)
        required: true
  [...]

postgres_schema.yml file:

connection:  postgress_connection
    classes:
      ClassName:
        tableName: table_name
        columns:
          id:
          name:
            type: varchar(255)
            required: true
      [...]

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

1 голос
/ 03 июня 2011

Полагаю, вы можете!

У Google довольно много результатов для этого, попробуйте

http://snippets.symfony -project.org / snippet / 194

Это основано на более старой версии propel / symfony, но, на мой взгляд, все еще в силе.Плюс есть недавние комментарии, предполагающие, что это работает.

...