1

Datamapperから始めて、いくつかのエラーが発生しています。オブジェクト、関連オブジェクトを作成してから関係を保存すると、両方のオブジェクトも保存されると思いました。

$u = new User();
$u->where('id', $id)->get();

$p = new User_profile();
$p->name = 'xx';

$u->save($p);

実際、これが好きな場合、プロファイルは保存されません。そしてもちろん、関係ではありません。私がこのようなことをした場合:

$u = new User();
$u->where('id', $id)->get();

$p = new User_profile();
$p->save();
$p->name = 'xx';

$u->save($p);

両方とも保存されますが、プロファイルは完全に空です。パラメータは保存されませんが、idとDatamapperのデフォルト(作成および更新)

この動作は正しいですか、それとも何かが足りませんか?

ありがとう!

4

2 に答える 2

1

ドキュメント:http ://datamapper.wanwizard.eu/pages/save.htmlの[新しいオブジェクトとその関係を1回の呼び出し保存]および[既存のオブジェクトとその関係を1回の呼び出しで保存]セクションでは、データマッパーの方法について説明しています。これを処理します。

何が起こっているのかというと、それsaveは決して呼び出されないということUser_profile()です。まだ永続化されていないオブジェクトを呼び出す必要があるsave()ため、これでうまくいくはずです。

$u = new User();
$u->where('id', $id)->get();

$p = new User_profile();
$p->name = 'xx';

$p->save($u);
于 2012-01-12T19:22:19.677 に答える
1
$u = new User();
$u->where('id', $id)->get();

//passing the user object $u to the user_profile object ensures that
//data-mapper fills $p with any related information in the database if that exists
//or just the id attribute for the relationship.
//This way, $p will not be empty even though its fields might not b complete,
//but the relating attribute which should be 'user_id' will have a valid value
//in the 'profiles' table
$p = new User_profile($u);

$p->name = 'xx';

$u->save();
$p->save();

この最後に、オブジェクト$pは最小で次の値になります。

echo $p->user_id   //prints out $id;
echo $p->name      //prints out xx.

saveメソッドを呼び出した後、データが以前に存在しなかった場合はプロファイルテーブルの新しいエントリとして、そのような行がすでに存在する場合は更新として確実に保存する必要があります。

これで問題が解決することを願っています。

于 2012-01-12T22:25:58.683 に答える