我从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默认(创建和更新)
这种行为是正确的还是我错过了什么?
谢谢!
答案 0 :(得分:1)
在一次调用中保存新对象及其关系下的文档:http://datamapper.wanwizard.eu/pages/save.html和在一次调用中保存现有对象及其关系部分,它解释了datamapper如何处理这个问题。
发生的事情是save
永远不会调用User_profile()
。你需要在尚未持久化的对象上调用save()
,所以这应该适合你:
$u = new User();
$u->where('id', $id)->get();
$p = new User_profile();
$p->name = 'xx';
$p->save($u);
答案 1 :(得分: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方法之后,如果数据在之前不存在,或者如果这样的行已经存在则作为更新存在,它们肯定必须保存为配置文件表中的新条目。
希望这能解决你的问题。