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"),
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,
null,
null,
null
);
?>
OBJECT_CONDITION_GE etc... は検索条件を設定するための定数で定義の一覧はリファレンスに記載されている。
今までいくつか条件が重なる様な検索条件を発行するときは、AppObjectではなくて直接操作していたので試しに使ってみたのだけど、こういう使い方が一般的なのだろうか?
少し複雑な気もしなくもない...。
ちゃんぽんの記事のところ、はてなハイクのところ突き抜けてますよ(笑)
はじめまして。
AppObjectは、今後もメンテしていくかというのがちょうど議論になっていました。
http://ethna.jp/ethna-dblayer-discuss.html
EthnaでAppObjectを使うのが一般的かどうかはわかりませんが、使いにくさや、変な複雑さがあるのは事実で、2.3.5以降どうしていくのがより良いかを模索中です。
こうしたらいいかもとか、これは必要!とか、今はこうしているなど、ぜひ聞かせてください。
よし、今度はちゃんぽんを食べに行こう