【问题标题】:Update large CakePHP model, but *don't* touch certain fields?更新大型 CakePHP 模型,但 *不要* 触及某些字段?
【发布时间】:2011-04-15 10:07:48
【问题描述】:

使用 CakePHP 1.3

我在 CakePHP 中有一个相当大的模型,我想在表单页面上有一些隐藏元素,以便在保存之前(手动)比较/验证,但是在执行 saveAll()(带有验证)时,我不希望这些字段出现(主要是为了避免它们被更新)。

处理此问题的正确方法是什么?在将其从$this->data 中删除,然后再将其交给saveAll()

【问题讨论】:

    标签: php cakephp models


    【解决方案1】:

    使用'fieldlist' option

    $this->Model->saveAll($data, array('fieldlist' => array('fields', 'to', 'save')));
    

    $fields = array_keys($this->Model->_schema);
    $fieldsNotToSave = array('field1', 'field2');
    $fieldsToSave = array_diff($fields, $fieldsNotToSave);
    

    【讨论】:

    • 那是我正在研究的东西,但是 - 由于我的模型有点大,是否有一个补充功能可以反过来:定义不保存的字段?我要保存的东西比要保存的要少得多。
    • @anon 不,你应该总是选择 whitelisting 而不是 blacklisting,否则它可能会在后面咬你。请参阅我的编辑以获取替代方案。
    【解决方案2】:

    我通常会在saveAll() 之前使用unset()。如果您考虑一下,这是最聪明/最简单的方法。也就是说,除非您想手动命名隐藏输入字段,而不是表单助手生成的默认 data[Model][field]

    但是您必须手动访问它们并手动验证它们。

    unset() 快​​速清晰。

    【讨论】:

    • 斯蒂芬,这看起来很棒,而且绝对简单。感谢您花时间回答!
    猜你喜欢
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 2015-10-02
    • 2014-05-21
    • 2019-08-10
    相关资源
    最近更新 更多