[seasar-php:128] S2DaoのDTOについて
    ISHITOYA Kentaro
    [E-MAIL ADDRESS DELETED]
       
    2007年 5月  7日 (月) 17:55:45 JST
    
    
  
石戸谷と申します。
S2Daoを最近使わせていただいているのですが、わからないことがあるので質問
させてください。
バージョンは、1.1.2です。
・DTOで自動検索SQLを生成しようとしても生成されない。
DAOに、
public function findByPersonsSearchCondition(PersonsSearchCondition $dto);
というメソッドを定義して、
class PersonsSearchCondition{
    public $nickname = "hogehoge";
    public function setNickname($nickname){
        $this->nickname = $nickname;
    }
    public function getNickname(){
        return $this->nickname;
    }
}
という、DTOを定義しました。
この状態で、
$dao = ComponentFactory::getComponent("AutoPersonsDao");
$entity = new PersonsSearchCondition();
$entity->setNickname("mogemoge");
$entities = $dao->findByPersonsSearchCondition($entity);
としても、WHERE句が生成されません。いろいろおってみたのですが、
S2DaoInterceptor.class.phpの45行目あたりで、sqlをダンプすると、
/*BEGIN*/ WHERE /*END*/
のように、最後に空のWHERE句が生成されていました。
いまいちよくわかっていないのですが、S2Dao_DaoMetaDataImpl.class.phpの485
行目の、
            if($dmd->hasPropertyType($aliasName)){
                continue;
            }
という、命令をコメントアウトすると、意図したとおりに動作します。あるい
は、DTOの定義で、
class PersonsSearchCondition{
    const nickname2_COLUMN = "nickname";
    public $nickname2;
    public function setNickname2($nickname2){
        $this->nickname2 = $nickname2;
    }
    public function getNickname2(){
        return $this->nickname2;
    }
}
のようにすると、やはり意図したとおりに動作します。
何か根本的にやり方が間違っているような気がしています。
問題の解決方法あるいはポインタをご教示いただければ幸いです。
よろしくおねがいいたします。
    
    
seasar-php メーリングリストの案内