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

时间:2011-05-06 21:13:38

标签: php cakephp cakephp-1.3 has-many

我最终使用saveAll()来保存我的hasMany数据 - (一个包含多个时间表的事件)。

我通过重复events / admin_edit.ctp上的$ this-> data ['Schedule']数据,并为与该事件相关的任何/所有计划构建了所有字段,从而使其工作。

这似乎很好(我认为),但我的问题/问题是 - 我必须将Schedule.id和Schedule.event_id字段添加为隐藏字段,以便它知道要保存哪些数据。这看起来非常不安全/错误...... 1)这是正确的方法吗? 2)有人只能将该字段编辑为另一个ID,点击保存更新其他事件的信息吗?

我的下一个假设是,在执行saveAll()之前,我必须在控制器中构建某种检查...但是我写的越多,它就越复杂,而且蛋糕越少 - 好像它似乎。

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

1 个答案:

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