POMM Postgresql множественная схема и глобальный класс

Мы столкнулись с двумя проблемами, не могли бы вы помочь нам решить эту проблему?

1) как динамически указывать на схему в POMM. Пример у меня есть public схема, в которой хранятся все данные о пользователях и частные схемы, связанные с каждым пользователем. Когда пользователь входит в логику, чтобы прочитать public Схема, найти номер приватной схемы и перенаправить пользователя на его приватную схему — как я могу добиться этого в POMM (http://www.postgresql.org/docs/9.1/static/ddl-schemas.html). Внутри каждой частной схемы есть несколько таблиц (например, общие данные о сотрудниках / данные о зарплатах сотрудников и т. Д.).

2) Когда у нас есть несколько схем с одинаковой структурой таблицы (общие данные о сотруднике / данные о зарплате сотрудника), нам нужен один класс для работы со всеми схемами — теперь для каждой таблицы POMM генерирует один класс.

Спасибо вам за помощь.

0

Решение

По умолчанию менеджер моделей 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 Файлы моделей будут указывать на таблицы в разных схемах.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]