cakephp 保存数据的问题!!

liuxk1976 2010-06-30 11:26:11
三个数据表:Cities,Maps,Points.表关系:Cities与Maps,Points都是hasmany<->belongTo的关系,Maps与Points也是Hasmany<->belogTo关系。现在我在cities_controller里使用saveAll方法保存数据,我的想法是在添加一条city数据的同时,生成它下面的Maps数据,Points数据.因为都在models定义了表的关系,现在的问题是保存Points数据的时候可以通过$this->Map->id取得city_id外键值,但没有方法取得新添加的Masp记录的map_id的值,从而导致Points的数据无法正常插入。

请问,在这种情况下(即cities_controller的方法里)有什么方法取到新增加的map的id值?或者另外有什么解决方案,能够保证在插入city数据的同时也插入下面的Map数据,Points 数据.三者之间是从上到下的层层包含关系。

...全文
210 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
按你的意思,估计不是用saveAll方法保存,而是循环用save保存,然后取lastinsertid 是这个意思吧?
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
用lastinsertid?在cities_controller的添加方法里怎么写?$this->City->Map->lastinsertid?
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
哦,怎么弄? 按我标题里讲的,怎么取到每张map_id的值,然后用saveAll保存数据。
lazysmile 2010-06-30
  • 打赏
  • 举报
回复
为什么不可以,刚才的过程转化成cake也很简单。
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
意思就是用cakephp实现不了??其实不用cakephp做,我已经做过一遍了。现在是想把整个后台改成用cakephp做。
lazysmile 2010-06-30
  • 打赏
  • 举报
回复
那更适合用程序做了,你添一个城市名,取得ID,随机在map表插入N条记录,然后取出MAP表的相应记录的Id遍历插入随机的point。多条记录可能只能插入之后再取出来获得id,如果只有一条可以使用lastinsertid
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
数据是随机生成的,我每添加一个城市,然后按一定的数值范围随机生成map,point的各项数据,包括地点名,也是随机生成。
lazysmile 2010-06-30
  • 打赏
  • 举报
回复
你的数据现在是怎么存的,如果在数据库里写个小程序批量导一下。
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
我就没实现多级关联同时保存。按照文档的示例,我就只会一级一级的保存。
但那样操作很麻烦。我的需求是这样,一个城市下会有10来个地图,然后再每张地图会有10有几个地点(Points)。这样,如果有两百个左右的城市,我的手动一个一个为2000张地图添加points,那个工作量实在太大了。

lazysmile 2010-06-30
  • 打赏
  • 举报
回复
如果你知道文档,你应该看到

When working with associated models, it is important to realize that saving model data should always be done by the corresponding CakePHP model.

你所谓的同时存入事实上还是各个MODEL分步完成的。
liuxk1976 2010-06-30
  • 打赏
  • 举报
回复
文档我当然知道了。我是想一步实现两个级别的关联数据。因为实际需求不能一个MAP下再去一个一个加Points,那样工作量很大。
lazysmile 2010-06-30
  • 打赏
  • 举报
回复
Cake里保存关联表的数据是一步步进行的。文档里有个例子

function add() {
if (!empty($this->data)) {
// We can save the User data:
// it should be in $this->data['User']

$user = $this->User->save($this->data);

// If the user was saved, Now we add this information to the data
// and save the Profile.

if (!empty($user)) {
// The ID of the newly created user has been set
// as $this->User->id.
$this->data['Profile']['user_id'] = $this->User->id;

// Because our User hasOne Profile, we can access
// the Profile model through the User model:
$this->User->Profile->save($this->data);
}
}
}


User好比你的city,Profile是map。首先存入表单提交的city数据,得到map表的city_id,然后存map的相关内容,按照从高到低的顺序依次往下进行操作。

4,251

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧