1

目标:使用实体 ->set() 和 ->save() 以编程方式将字符串字段的值从“1”更改为“01”

当尝试以编程方式(通过自定义模块的 cron 挂钩)更新节点上的字段时,“Text (plain)”字段的初始值为“1”。当尝试以编程方式将字段更新为“01”(0 对业务目的很重要)时,更改将被忽略。但是,如果我设置为几乎任何其他值,它确实有效。

// DOES NOT save update to field (Current value is "1")
$node = \Drupal\node\Entity\Node::load(1);
$node->set('field_code', '01'); // '01' is indeed a string
$node->save();
// DOES save update to field (Current value is "1")
$node = \Drupal\node\Entity\Node::load(1);
$node->set('field_code', '02');
$node->save();

如果我要通过 UI 的节点编辑表单进行更改,则更改将保存在同一场景中。

有人遇到过这种情况么?似乎必须进行一些验证,'01' == '1'; // true在 PHP 中保存为(作为字符串)之前比较字符串。

4

1 回答 1

1

我遇到了同样的问题,我终于找到了原因。

如您所知,更新现有修订时,如果字段值未更改,请保留现有记录。 并且一个字段值和原始值比较不是===,而是==在最后一个FieldItemList::equals

不幸的是,我们似乎无法避免这个问题。

于 2020-10-06T14:40:24.370 回答