Поддержка нескольких баз данных в Symfony

Я использую Propel в качестве своего DAL для своего проекта Symfony. Кажется, я не могу заставить свое приложение работать с двумя или более базами данных.

Вот мой schema.yml:

db1:
  lkp_User:
    pk_User:                     { type: integer, required: true, primaryKey: true, autoIncrement: true }
    UserName:                    { type: varchar(45), required: true }
    Password:                    longvarchar
    _uniques:
      Unique:                    [ UserName ]

db2:
  tesco:
    Id:                  { type: integer, required: true, primaryKey: true, autoIncrement: true }
    Name:                { type: varchar(45), required: true }
    Description:         longvarchar

А вот и файл database.yml:

dev:
  db1:
    param:
      classname: DebugPDO
test:
  db1:
    param:
      classname: DebugPDO
all:
  db1:
    class: sfPropelDatabase
    param:
      classname: PropelPDO
      dsn: 'mysql:dbname=bpodb;host=localhost'   #where the db is located
      username: root
      password: #pass
      encoding: utf8
      persistent: true
      pooling: true


  db2:
    class: sfPropelDatabase
    param:
      classname: PropelPDO
      dsn: 'mysql:dbname=mystore2;host=localhost'   #where the db is located
      username: root
      password: #pass
      encoding: utf8
      persistent: true
      pooling: true

Когда я вызываю php symfony propel-build-model, генерируется только db1, а db2 нет.

Есть идеи, как решить эту проблему?


person Graviton    schedule 09.04.2009    source источник


Ответы (3)


У меня эта проблема работает! Самое главное, вы должны назвать свою схему в соответствии с %dbname%.schema.yml. Таким образом, Symfony сможет назначить ymls правильной базе данных.

person Graviton    schedule 09.04.2009
comment
Это плохая задница. Спасибо за совет! - person Matt Sidesinger; 09.04.2009

Также при запуске задачи необходимо указать подключение, например:

symfony propel:build-all-load --connection=my_connection

Это сработало для меня, надеюсь, это поможет.

person Community    schedule 20.04.2009

Вы также можете использовать Propel::getConnection('db2') для ручного извлечения соединения.

Просто имейте в виду, что то, что вы называете "db1", "db2", является именами соединений. Вы можете иметь несколько подключений к одной и той же базе данных с разными логинами/разрешениями (например, только чтение и т. д.).

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

person Oncle Tom    schedule 08.05.2009