[seasar-php:129] Re: S2DaoのDTOについて
Yusuke Hata
[E-MAIL ADDRESS DELETED]
2007年 5月 10日 (木) 04:01:36 JST
ハタです。
おひさしぶりです。
下記の内容を読む限りでは、examples/EmployeeAutoDaoと同じような使い方と認識しました。
DTOでは自動的検索用SQLに値を設定する際に、マッピング定義(_COLUMNアノテーション)を必要とします。
このDTOでのマッピングでは、Daoが検索する際に指定したBeanで取得するプロパティに対して
カラム名のマッピング定義を行います。
これはDTOのプロパティがBeanのそれと一致するかが判別できないためにそうしています。(N:1の関係などで)
"nickname" というカラム名はBeanで指定されているみたいなのですが、
DTO側でも_COLUMN定義で"nickname" と指定しても動作は変わらずでしょうか?
# const nickname2_COLUMN = "nickname" ← のnickname2というプロパティはいらないのでは。
また、内部実装として「テーブルに存在しないプロパティを無視する」というのがあります。
ちょうど
> S2Dao_DaoMetaDataImpl.class.phpの
> 485 行目の、
> if($dmd->hasPropertyType($aliasName)){
> continue;
> }
周辺のifが並んでいる部分がそれにあたります。
もしコメントアウトすることで、期待する動作をするのであれば
次のリリース時にコメントアウトした状態で出そうと思います。
まだテストを流していないですが
たぶん、この部分を取り除いても大きな変更などはないはずですので。
以上です、よろしくお願いします。
ISHITOYA Kentaro <[E-MAIL ADDRESS DELETED]> wrote:
> 石戸谷と申します。
>
> 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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-php
--
Yusuke Hata <[E-MAIL ADDRESS DELETED]>
blog: http://blog.xole.net/
seasar-php メーリングリストの案内