[seasar-php:130] Re: S2DaoのDTOについて

ISHITOYA Kentaro [E-MAIL ADDRESS DELETED]
2007年 5月 12日 (土) 16:19:39 JST


石戸谷です。

ご返答ありがとうございます。
> "nickname" というカラム名はBeanで指定されているみたいなのですが、
> DTO側でも_COLUMN定義で"nickname" と指定しても動作は変わらずでしょうか
_COLUMNを定義しても、動作は変わりませんでした。

下記485行目周辺をコメントアウトすると、
persons.nickname = 'administrator'
というWHERE句が生成され、元に戻すと、生成されませんでした。
利用したDTOは下記です。

class CMMesse_AutoPersonsDto extends CMMesse_Entity{
protected $nickname;
const nickname_COLUMN = 'nickname';
public function setNickname($entity){
$this->nickname = $entity;
}
public function getNickname(){ return $this->nickname; }
}

ところで、createAutoSelectSqlByDtoで生成されるWHERE句ですが、Dtoに複数の
プロパティがあって、先行するプロパティが nullのときに、不必要なANDが生成
されてしまいます。
具体的には、
class hogeDto{
protected $first;
protected $second;
protected $third;
}
のとき、次のように$firstがnullだと、
$hogeDto->setFirst(null);
$hogeDto->setSecond('moge');
$hogeDto->setThird('hoga');

SQLコマンドが、
WHERE /*BEGIN*/ WHERE
/*IF $first != null */$first = /*$first*/null /*END*/
/*IF $second != null */AND $second = /*$second*/null /*END*/
/*IF $third != null */AND $third = /*$third*/null /*END*/
/*END*/
となり、SQL文は

AND $second = 'moge' AND $third = 'hoga'

となってしまいます。
あまりうまい解決方法が思い浮かばないので、ご報告まで。

以上よろしくお願いいたします。


seasar-php メーリングリストの案内