我在 Propel 中配置了一些表,并生成了 Peer 静态类。
我的问题是我需要对不同但相似的表执行相同的搜索操作。这些表有不同的 Peer 类,因为它是 Propel 的工作方式。这种情况会导致有关在这些表上执行的查询的重复代码。
我想知道在这种情况下是否有一些结构(避免使用 function 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];
}
如您所见,我设法为行对象编写了一个工厂方法,但我找不到对静态类执行相同操作的方法。换句话说,我希望访问静态类是动态的,而不是一种丑陋的解决方法。
有任何想法吗?
谢谢 :)