目标:使用实体-> set()和-> save()
以编程方式将字符串字段的值从“ 1”更改为“ 01”当尝试以编程方式(通过自定义模块的cron挂钩)更新节点上的字段时,“文本(纯文本)”字段的初始值为“ 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的节点编辑表单进行更改,则更改将保存在同一场景中。
还有其他人遇到过吗?似乎必须进行一些验证,即在将PHP保存为'01' == '1'; // true
(作为字符串)之前比较字符串。
答案 0 :(得分:1)
我遇到了同样的问题,终于找到了原因。
如您所知,when updating an existing revision, keep the existing records if the field values did not change.
并且一个字段值和原始值不是通过hanoi(n-1, src, aux, des) + (((src, des),) + hanoi(n-1, aux, des, src))
进行比较,而是通过===
在FieldItemList::equals
的最后进行比较。
不幸的是,看来我们无法避免这个问题。