生成された Peer 静的クラスを使用して、Propel で構成されたいくつかのテーブルがあります。
私の問題は、異なるが類似したテーブルで同じ検索操作を実行する必要があることです。これらのテーブルには、Propel がどのように機能するかによって異なる Peer クラスがあります。この状況は、これらのテーブルで実行されるクエリに関するコードの重複につながります。
eval
この場合、私を助けるかもしれないいくつかの構造( function の使用を避ける)があるかどうか疑問に思っていました。異なる静的 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];
}
ご覧のとおり、行オブジェクトのファクトリ メソッドを作成できましたが、静的クラスに対して同じことを行う方法が見つかりませんでした。言い換えれば、静的クラスへのアクセスを動的にし、醜い回避策ではなくしたいと考えています。
何か案は?
ありがとう :)