【问题标题】:Reset to MySQL DEFAULT value on update in CakePHP在 CakePHP 中更新时重置为 MySQL DEFAULT 值
【发布时间】:2012-08-10 05:23:17
【问题描述】:

我想知道在 CakePHP 中执行更新操作时如何将字段重置为 DEFAULT 值(在 MySQL 结构中设置的值)。就像在 SQL 中使用 DEFAULT 关键字一样:

INSERT INTO items (position) VALUES (DEFAULT);

编辑:不是在寻找在创建时使用默认值的方法,而是在寻找一种方法将字段重置为默认值已经用过了。

【问题讨论】:

  • 如何执行查询? $db->expression('DEFAULT') 怎么样?
  • 只需 $this->Item->save($data) where $data['Item']['position'] = (这就是我需要的)
  • 我认为这个stackoverflow.com/questions/3823169/… 也适用于 DEFAULT 但不会:/
  • 不包括数据数组中的键不工作吗?

标签: mysql cakephp default-value cakephp-2.2


【解决方案1】:

如果您想将其默认值保存到 mysql 数据库中,您可以简单地从请求的数组中取消设置表单输入。您可以尝试以下方法来达到同样的效果:

$item_details = $this->request->data;
unset($item_details['Item']['position']);
$this->Item->create();
$this->Item->save($item_details);

根据您编辑的问题,如果您想在更新记录期间重置任何字段。你只需要使用MySql default() function

$item_details = $this->request->data;
$this->Item->id = $item_details['Item']['id'];
$this->Item->saveField('position', DboSource::expression('DEFAULT(position)'));

【讨论】:

  • 我认为我的问题有点误导。我不是指创建过程——这很清楚如何使用默认值。我正在寻找一种方法来重置更新的默认值。 (对不起,我现在重新表述我的问题)
  • 不起作用。 Cakep 尝试将 'DEFAULT(position)' 保存到我的 INT 字段中,所以它是 0。
  • 请检查您指定的position 字段是否有任何默认值。尝试任何其他领域。它会工作得很好。您实际需要保存什么?
  • 它确实保存了 - 但它没有保存我设置的默认值 9999(并且在创建时使用)。它保存了 0,因为它试图将字符串保存到 INT 字段中。我自己通过一个工作示例添加了一个新答案。毕竟谢谢你的帮助:)
【解决方案2】:

要回答我自己的问题,可以这样做:

$this->Item->saveField('position', DboSource::expression('DEFAULT(position)'));

$data['Item']['position'] = DboSource::expression('DEFAULT(position)');
$this->Item->save($data)

但是 - 我们来看看失去的时间:为了能够使用DboSource之前必须有一个数据库查询!否则 CakePHP 会抛出错误 Class 'DboSource' not found

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-08
    • 2010-11-26
    • 1970-01-01
    相关资源
    最近更新 更多