【问题标题】:Phalcon Save: Can I update only specified columns if update?Phalcon Save:如果更新,我可以只更新指定的列吗?
【发布时间】:2017-02-02 09:51:16
【问题描述】:

我有一个包含这些列的表格:

param_id
val_value
val_flag
date_value
tmp_value
tmp_flag

我有一个元素数组,我总是有 param_id 和 date_value,但有时我有 val 列,而其他时候我有 tmp 列。

我使用$data->save(),因为有时我需要在 db 中创建一个新寄存器,而其他时候我需要使用 param_id 和 date_value 更新寄存器。

问题是:有没有办法进行插入/更新,但何时更新,只更新 tmp 列或 val 列?我认为 find First 是我唯一的选择,但也许还有其他方法。

谢谢。

[编辑]

我正在尝试使用白名单,但它不起作用。让我解释一下该方法是如何工作的:我收到一个对 Web 服务的请求,处理 xml 并使用收集的信息生成一个元素数组,在处理完这些元素之后,我有一个适合保存的类的元素数组,但是这些可能是新的或现有的,并且可能包含 tmp 或 val 值,我已经尝试过,但我仍然将值更改为 null。

if ($medida->tipo == 'temporal'){
  $whiteList = array('val_value','val_flag');
}else if ($medida->tipo == 'validado'){
  $whiteList = array('tmp_value','tmp_flag');
}
$dato->save(null, $whitelist);

我没有post的数据,我用null代替,我也试过用数组手动分配数据得到同样的结果。

【问题讨论】:

    标签: save phalcon


    【解决方案1】:

    这里有两个选项可以帮助您:

    1)save() 方法使用“白名单”。

    $obj->save($this->request->getPost(), ['tmp_1', 'tmp_2']);
    

    the documentation 中的更多信息。

    2)使用“事件管理器”。

    beforeCreate()beforeUpdate() 方法很有用,因此您可以决定使用哪些字段。

    the documentation 了解更多信息。

    【讨论】:

      【解决方案2】:

      此外,如果您真的希望 phalcon phql 仅更新已更改的列,则需要启用动态更新。

      【讨论】:

      • $this->useDynamicUpdate(true); 添加到模型中的initialize 方法中。
      • 我没有初始化方法所以我创建了它,现在它什么也不做,我有这个:public function initialize(){ $this->useDynamicUpdate(true); parent::initialize(); }这是正确的吗?
      猜你喜欢
      • 2019-01-31
      • 2010-12-16
      • 2017-03-15
      • 2018-01-20
      • 2020-01-21
      • 2010-12-31
      • 1970-01-01
      相关资源
      最近更新 更多