Рейтинг:0

Как я могу программно удалить значение поля?

флаг gb

Используя Entity API, я знаю, как получить значение или установить значение:

$nid = $entity->id();
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
...
$nom = strtoupper($node->get('field_nom')->значение);
$node->set('field_nom', $nom);
$узел->сохранить();

Но есть ли возможность удалить значение этого поля?

Я попытался напрямую удалить значение в базе данных

$query =\Drupal::database()->delete('node__field_nom');
$query->условие('field_nom', $nom);
$запрос->выполнить();

Но так как значение кешируется, ноду приходится дважды перезагружать, чтобы увидеть результат на экране (пустое поле)

Рейтинг:2
флаг cn

Содержимое поля представляет собой список элементов поля, и обычно вам нужно будет включить одно значение также в массив. Тот факт, что вы можете установить скаляр, как в вашем примере, связан с дополнительным кодом в Field API, который обнаруживает скаляр и передает его в список элементов поля с одним значением. Чтобы удалить поле, вы не можете установить пустой скаляр, потому что это будет интерпретироваться как один элемент поля с этим пустым значением.

Итак, чтобы удалить все содержимое поля, установите пустой массив:

$node->set('field_nom', []);

Кстати, вы можете получить все содержимое поля:

$values ​​= $node->get('field_nom')->getValue();

Измените массив $values ​​и установите его снова:

$node->set('field_nom', $значения);
cocq avatar
флаг gb
Работает :-) спасибо!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.