D8 PHP:当值从“ 1”更改为“ 01”时,通过set()和save()更新节点实体上的“文本(纯文本)”字段值将被忽略

时间:2019-12-18 22:07:57

标签: php drupal drupal-8 drupal-nodes drupal-entities

目标:使用实体-> 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(作为字符串)之前比较字符串。

1 个答案:

答案 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的最后进行比较。

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