У меня есть несколько таблиц, настроенных в Propel, со сгенерированными статическими классами Peer.
Моя проблема в том, что мне нужно выполнить одну и ту же операцию поиска в разных, но похожих таблицах. Эти таблицы имеют разные классы Peer, так как именно так работает Propel. Эта ситуация приводит к дублированию кода в отношении запросов, выполняемых к этим таблицам.
Мне было интересно, есть ли какая-то конструкция (избегающая использования функции eval
), которая могла бы помочь мне в этом случае; Я действительно хотел бы избежать написания дублированного кода, который выполняет одни и те же точные вызовы только для разных статических классов Peer.
Пример фрагмента кода из (очень длинного) метода класса, который я пишу:
$criteria = new Criteria();
$criteria->add(FoobarPeer::CONTRACTNR,$data['contractnr']);
$result = FoobarPeer::doSelect($criteria);
if(count($result) > 1){
throw new FoobarException("status: more than one row with the specified contractnr.");
}
if(count($result) == 0){
// no object with given contractnr. Create new one.
$obj = $this->factory->createORM("foobar");
$obj->setCreatedAt(time());
} else {
// use and update existing object.
$obj = $result[0];
}
Как видите, мне удалось написать фабричный метод для объекта строки, но я не смог найти способ сделать то же самое для статических классов. Другими словами, я хотел бы иметь динамический доступ к статическим классам, а не таким образом, чтобы это было уродливым обходным путем.
Любые идеи?
Благодарность :)