D8 PHP:当值从 "1" 更改为 "01" 时,忽略通过 set() 和 save() 更新节点实体上的"Text (plain)"字段值



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

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

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

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

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

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

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

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

最新更新