[seasar-php:135] Re: S2DaoのUpdateについて

ISHITOYA Kentaro [E-MAIL ADDRESS DELETED]
2007年 5月 19日 (土) 15:40:43 JST


石戸谷です。

追記です。
以下のPERSISTENT_PROPSアノテーションをdaoに設定すると、
const update_PERSISTENT_PROPS = 'personTypeId';
次のエラーが出ます。

Fatal error: Uncaught exception
'S2Container_PropertyNotFoundRuntimeException' with message 'Property[]
of class[PersonsEntity] not found' in
C:\cygwin\home\kent\test\s2dao\s2dao.php5\build\s2dao.php5\S2Dao\S2Dao_DtoMetaDataImpl.class.php:60
Stack trace:
#0
C:\cygwin\home\kent\test\s2dao\s2dao.php5\build\s2dao.php5\s2dao.core.classes.php(876):S2Dao_DtoMetaDataImpl->getPropertyType('personTypeId')
#1
C:\cygwin\home\kent\test\s2dao\s2dao.php5\build\s2dao.php5\S2Dao\S2Dao_UpdateAutoStaticCommand.class.php(51):
S2Dao_AbstractAutoStaticCommand->setupUpdatePropertyTypes(Array)
#2
C:\cygwin\home\kent\test\s2dao\s2dao.php5\build\s2dao.php5\s2dao.core.classes.php(839):S2Dao_UpdateAutoStaticCommand->setupPropertyTypes(Array)
#3
C:\cygwin\home\kent\test\s2dao\s2dao.php5\build\s2dao.php5\S2Dao\S2Dao_UpdateAutoStaticCommand.class.php(35):S2Dao_AbstractAutoStaticCommand->__construct(Ob
ject(S2Container_PDODataSource), Object(S2Dao_BasicStatementFactory),
Object(S2Dao_BeanMetaDataImpl), Array)
#4 C:\cygwin\home\kent\test\s2dao\s2dao.p in
C:\cygwin\home\kent\test\s2dao\s2dao.php5\build\s2dao.php5\S2Dao\S2Dao_DtoMetaDataImpl.class.php
on line 60

ちなみに、
> S2Dao_DaoMetaDataImpl.class.php:350行目の、getPersistentPropertyNamesが、
> 返しているarraysの中にrelkeyが含まれておらず、処理的には、関数内の2つめ
> のif文(378行目)です。
> RelationPropertyの値をnamesに入れていないからかなとおもって、いれてみた
> のですが、エラーで動きませんでした。
で、出るエラーメッセージは、上記と同じものです。
以上よろしくお願いいたします。

ISHITOYA Kentaro wrote:
> 石戸谷です。
>
> 連投申し訳ありません。
> 質問なのですが、N:1のリレーションを張ったプロパティの値を更新をするに
> はどのようにすればいいのでしょうか。
>
> descriptions: id(pk) description
> person_types: id(pk) name
> persons: id(pk) descriptons_id(fk) person_types_id(fk) nickname
>
> というテーブルがあって、PersonsEntityからN:1のリレーションを張っている
> とします。
> テーブルには適当なデータが入っていて、
>
> $person = $dao->getById(0);//適当なデータ
> $person->getPersonTypeId->setId(2); //personのperson_types_idを2にしたい
> $dao->update($person);
>
> ではアップデートされなかったので、
> $personType = new PersonTypesEntity();
> $personType->setId(2);
> $person->setPersonTypeId($personType);
> $dao->update($person);
>
> どちらも生成されるSQLは、
> UPDATE persons SET nickname = 'administrator' WHERE id = 1
> で、リレーションが張られているもののデータはSQLに含まれませんでした。
>
> そこで、コードを見てみると、
> S2Dao_DaoMetaDataImpl.class.php:350行目の、getPersistentPropertyNamesが、
> 返しているarraysの中にrelkeyが含まれておらず、処理的には、関数内の2つめ
> のif文(378行目)です。
> RelationPropertyの値をnamesに入れていないからかなとおもって、いれてみた
> のですが、エラーで動きませんでした。
>
> N:1のリレーションを張ったプロパティの値を更新するには、どうすればいいの
> でしょうか。
> ご教示いただければ幸いです。
> 以上よろしくお願いいたします。
> _______________________________________________
> seasar-php mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-php
>   



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