在CakePHP中使用saveAll()保存多个hasMany数据,而无需在视图中写入id's


Save multiple hasMany data with saveAll() in CakePHP without writing id's in the view

我终于得到了我的hasMany数据保存使用saveAll() -(一个事件,有许多时间表)。

我通过在事件/admin_edit上重复$this->data['Schedule']数据来使其工作。Ctp,并为与该事件相关的任何/所有时间表构建所有字段。

这似乎很好(我认为),但我的问题/问题是-我必须添加时间表。id和Schedule。Event_id字段作为隐藏字段,这样它就知道要保存什么数据。这似乎非常不安全/错误……这是正确的做法吗?2)难道有人不能编辑字段为另一个ID,并点击保存更新不同的事件信息吗?

我的下一个假设是,我必须在做saveAll()之前在控制器中建立某种检查…但我写得越多,它就变得越复杂,看起来就越不像蛋糕。

任何关于如何更好地做我正在做的事情的想法/建议,或者在做saveAll()之前检查什么的见解都非常感谢。

我假设您的用户可以编辑他们自己的事件。如果是这种情况,最简单的方法是添加一个验证规则来验证用户是否被允许编辑提交的时间表。

在您的操作中,在调用save()之前,将当前用户id注入到每个记录中。即:

$this->data['Schedule'][0]['user_id'] = $this->Auth->user('id');

这可能不能完全工作,但应该使您接近。在Schedule模型中,添加一个验证规则:

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;
}