S2Dao.PHP5 に苦しめられていた件について

やっと検証やりなおせたので、まとめ。

ドキュメントを読み直してみたら、案の定自分が悪かった。何がしたかったかというと

<?php
/**
 * @Dao(bean = Item)
 */
interface HogeDao {
    /**
     * @Query("name LIKE ?")
     */
    public function getItemByNameLike($name);
}

これだと $name がバインドされない。ドキュメントには LIKE を使うときは SQL コメントを使うようにちゃんと書いてあった。ごめんなさい。

結局 SQL 文を別ファイルに切り出したけど、コメントアノテーションでは SQL コメントが使えない (と思う) ので、特に変更なし。

ところで・・・

どうして、さっきのように宣言して

<?php
$dao->getItemByNameLike("hoge");

SELECT ... WHERE name LIKE 'hoge'

にならないんだろう。

<?php
/**
 * @Dao(bean = Item)
 */
interface HogeDao {
    /**
     * @Query("number BETWEEN ? AND ?")
     */
    public function getItemByNumberBetween($a, $b);
}

$dao->getItemByNumberBetween(10, 20);

SELECT ... WHERE number BETWEEN 10 AND 20

になるのに

<?php
/**
 * @Dao(bean = Item)
 */
interface HogeDao {
    /**
     * @Query("number < ?")
     */
    public function getItemByNumberLessThan($max);
}

$dao->getItemByNumberLessThan(10);

は SQLException になるんだろう。

さらに

どうして

<?php
interface HogeDao {
    const BEAN = "Item";

    const getItem_RETURN = "list";

    public function getItem($id);
}

みたいなのがないんだろう。これがないと getItemByNameLikeList なんてメソッド名にしてしまう。この命名規則が悪いのかな・・・

と思った 1 日でした。