我最终使用saveAll()来保存我的hasMany数据 - (一个包含多个时间表的事件)。
我通过重复events / admin_edit.ctp上的$ this-> data ['Schedule']数据,并为与该事件相关的任何/所有计划构建了所有字段,从而使其工作。
这似乎很好(我认为),但我的问题/问题是 - 我必须将Schedule.id和Schedule.event_id字段添加为隐藏字段,以便它知道要保存哪些数据。这看起来非常不安全/错误...... 1)这是正确的方法吗? 2)有人只能将该字段编辑为另一个ID,点击保存更新其他事件的信息吗?
我的下一个假设是,在执行saveAll()之前,我必须在控制器中构建某种检查...但是我写的越多,它就越复杂,而且蛋糕越少 - 好像它似乎。
非常感谢任何关于如何更好地做我正在做的事情的想法/建议,或者在做saveAll()之前要检查什么的见解。
答案 0 :(得分:1)
我假设您有允许用户编辑自己的活动。如果是这种情况,最简单的方法是添加验证规则,验证用户是否可以编辑提交的计划。
在您的操作中,在调用save()之前,将当前用户ID注入每个记录。即:
$this->data['Schedule'][0]['user_id'] = $this->Auth->user('id');
这可能无法正常工作,但应该让你接近。在“计划”模型中,添加验证规则:
var $validate = array(
'user_id' => array(
'rule' => 'checkAuth'
'message' => 'Nice try buddy.',
'on' => 'update'
)
);
function checkAuth() {
$authorized = true;
if(!$this->hasAny(array(
'Schedule.id'=>$this->data['Schedule']['id'],
'Schedule.user_id' => $this->data['Schedule']['user_id']))) {
$authorized = false;
}
return $authorized;
}