Skip to content

Instantly share code, notes, and snippets.

@pmichelazzo
Last active July 8, 2022 13:48
Show Gist options
  • Save pmichelazzo/4e73ab7c216ff6603cc260771bedc95d to your computer and use it in GitHub Desktop.
Save pmichelazzo/4e73ab7c216ff6603cc260771bedc95d to your computer and use it in GitHub Desktop.
Drupal: removeItem não funciona como appendItem

Drupal: removeItem não funciona como appendItem

Imagine que você possui um campo multivalorado em seu tipo de conteúdo e deseja remover um dos itens nele existente. A função para executar esta tarefa chama-se removeItem, porém, ao contrário da função appendItem que você informa o nome do campo e o valor que deseja adicionar, a função removeItem precisa do delta do item que será removido.

Desta forma, seu código poderia ser algo como:

$nid = 1903;
$item_a_remover = 10;
$node = \Drupal::entityTypeManager()->getStorage('node')->load($nid);

foreach ($entity->get('nome_do_campo') as $delta => $item) {
  if ($item->target_id == $item_a_remover) {
    $node->get('nome_do_campo')->removeItem($delta);
    $entity->save();
  }
}

A principal diferença está na linha após o if que, quando deseja-se adicionar um novo elemento na lista, é usado:

$node->get('nome_do_campo')->appendItem(['target_id' => $valor]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment