Мы столкнулись с двумя проблемами, не могли бы вы помочь нам решить эту проблему?
1) как динамически указывать на схему в POMM. Пример у меня есть public
схема, в которой хранятся все данные о пользователях и частные схемы, связанные с каждым пользователем. Когда пользователь входит в логику, чтобы прочитать public
Схема, найти номер приватной схемы и перенаправить пользователя на его приватную схему — как я могу добиться этого в POMM (http://www.postgresql.org/docs/9.1/static/ddl-schemas.html). Внутри каждой частной схемы есть несколько таблиц (например, общие данные о сотрудниках / данные о зарплатах сотрудников и т. Д.).
2) Когда у нас есть несколько схем с одинаковой структурой таблицы (общие данные о сотруднике / данные о зарплате сотрудника), нам нужен один класс для работы со всеми схемами — теперь для каждой таблицы POMM генерирует один класс.
Спасибо вам за помощь.
По умолчанию менеджер моделей Pomm использует каждую схему как пространство имен и устанавливает отношения доступа, используя свое полное имя schema.relation
,
Идея заключается в том, чтобы настроить менеджер модели, чтобы можно было угадать схему благодаря search_path
переменная окружения.
Тебе необходимо template
схема, где определены все общие отношения во всех схемах. Создайте модели, структуры и объекты только для этой схемы:
$ php vendor/bin/pomm pomm:generate:schema-all db_name template
Для каждого класса Model в конструкторе просто установите отношение без информации о схеме, например:
class EmployeeModel extends Model
{
public function __construct()
{
$this->structure = new EmployeeStructure;
$this->flexible_entity_class = '\Test\TemplateSchema\Employee';
$this->structure->setRelation('employee'); // <- add this line
}
}
Теперь, в вашем коде, просто установите search_path
переменная среды, как это:
$pomm
->getDefaultSession()
->getConnection()
->executeAnonymousQuery(
sprintf("SET search_path to %s, public", $schema)
);
// Look in the employee table in the given schema
$employees = $pomm
->getDefaultSession()
->getModel('\DbName\Template\EmployeeModel')
->findAll()
;
Каждый раз, когда вы меняете путь поиска, Template
Файлы моделей будут указывать на таблицы в разных схемах.
Других решений пока нет …