【问题标题】:CakePHP: beforeSave not working with saveMany?CakePHP:beforeSave 不能与 saveMany 一起使用?
【发布时间】:2012-06-09 19:53:40
【问题描述】:

因此,出于某种原因,我在 beforeSave 回调中对数据所做的任何事情,虽然它适用于单个记录,但在使用 saveMany 时不起作用。

什么给了?如果我执行以下操作:

public function beforeSave() {
    $this->data['foo'] = 'bar'
    die($this->data);
}

我可以看到实际上 $this->data 确实发生了变化,但 saveMany 只是忽略它并保存原始数据。

【问题讨论】:

    标签: cakephp save


    【解决方案1】:

    确保在操作 $this->data 时包含模型名称,例如$this->data['Event']['foo'] = bar.确保该方法也返回 true,否则保存将失败。


    编辑

    我创建了一个简单的示例,它似乎对我有用,请参阅下面的代码。我的怀疑是你可能错误地调用了 saveMany 并将整个 $this->request->data 对象传递给它,但是如果没有看到你的调用也很难猜到。

    查看

    <?php echo $this->Form->create('ParentTable'); ?>
        Record 1: <br />
        <?php echo $this->Form->input('ParentTable.0.name'); ?>
    
        Record 2: <br />
        <?php echo $this->Form->input('ParentTable.1.name'); ?>
    <?php echo $this->Form->end('Submit'); ?>
    

    控制器

    public function index() {
        if ($this->request->data) {
            $this->ParentTable->saveMany($this->request->data['ParentTable']);
        }
    }
    

    型号

    public function beforeSave() {
        $this->data['ParentTable']['name'] .= ' modified';
        return true;
    }
    

    【讨论】:

    • 我回来了。一个问题是 saveMany 仅使用数字索引,因此数据格式与常规保存不同。
    • @BenjaminAllison 你试过上面的代码还是让它工作?
    • 美女!作品!谢谢霍夫!有一点不清楚,我只是预感到:beforeSave 单独处理每条记录。因此,当使用 saveMany 时,它会处理每条记录,一次处理一条……不像 afterFind 回调,后者会在返回多条记录时让一个数组循环。呵呵!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 2017-04-14
    • 2016-09-16
    • 2016-04-19
    • 1970-01-01
    • 2011-01-19
    • 2015-10-01
    相关资源
    最近更新 更多