Ethna_AppSeaechObjectを使ってみた


EthnaのAppObjectを使ってデータベースに検索条件を設定する場合、条件一致の場合は次の様にすればよい。
例えばSAMPLEというテーブルがあって、次の様な形だった場合、

NO MAILADRS USER URL MODE
1 foo@foo.com hideack ttp://d.hatena.ne.jp/hideack/ 1
2 bar@bar.com taro ttp://d.hatena.ne.jp/sample1/ 0
3 hoge@hoge.com hoge ttp://d.hatena.ne.jp/sample2/ 1

次の様なSQLを発行するのと等価な処理は、

SELECT MAILADRS,USER FROM SAMPLE WHERE MODE=1;

次の様になる。

<?php
$sample = $this->backend->getObject("SAMPLE");
$prop_ary = $sample->searchProp(
array("MAILADRS", "USER"),      // 取得する項目名
array("MODE" => "1"),           // 一致条件(検索条件, SQLのWHEREの内容)
null,
null,
null
);
?>

こうすると、$prop_ary[0]には条件一致した件数が格納され、$prop_ary[1]には取得された結果が格納される。
で、例えば単純な条件一致ではない場合、

SELECT MAILADRS, USER FROM SAMPLE WHERE NO>=2 AND NO<5

の様な条件を設定したい場合は、AppSearchObjectを使うと検索条件を設定できる。

<?php
$search = new Ethna_AppSearchObject("2", OBJECT_CONDITION_GE);
$search->addObject(
"SAMPLE",
new Ethna_AppSearchObject("5", OBJECT_CONDITION_LT),
OBJECT_CONDITION_AND
);
$sample = $this->backend->getObject("SAMPLE");
$prop_ary = $sample->searchProp(
array("MAILADRS", "USER"),  // 取得する項目名
$search,                    // 複数条件(AppSearchObjectのインスタンス)
null,
null,
null
);
?>

OBJECT_CONDITION_GE etc… は検索条件を設定するための定数で定義の一覧はリファレンスに記載されている。

今までいくつか条件が重なる様な検索条件を発行するときは、AppObjectではなくて直接操作していたので試しに使ってみたのだけど、こういう使い方が一般的なのだろうか?
少し複雑な気もしなくもない…。