J'ai un champ de référence de taxonomie à plusieurs valeurs nommé field_classrooms
dans un type de nœud. J'utilise le code ci-dessous pour supprimer la valeur dans le champ.
$node = Drupal\node\Entity\Node::load('1512');
unset($node->field_classrooms[0]);
$node->save();
Je ne peux pas comprendre ce que je fais mal ici.
Peut-être que quelque chose comme ça pourrait vous aider
// Get the list of the associated classrooms ...
$classrooms = $node->get('field_classrooms')->getValue();
// ... if there are any associated classrooms ...
if(!empty($classrooms)) {
foreach($classrooms as $classroom) {
// ... get the key of the classroom
$key = array_search(current($classroom), array_column($classrooms, key($classroom)));
// ... remove the relationship ...
$node->get('field_classrooms')->removeItem($key);
}
// ... and save the node.
$node->save();
}
Si vous souhaitez supprimer une seule classe de la liste et que vous connaissez déjà la liste
private function removeClassroomFromNode($node, $tid) {
if(null != $node) {
// ... get the list of associated classrooms
$classrooms = $node->get('field_classrooms')->getValue();
// ... get the key of the classroom
$key = array_search($tid, array_column($classrooms, 'target_id'));
// ... remove the classroom
$node->get('field_classrooms')->removeItem($key);
// ... save the node.
$node->save();
}
}
Vous pouvez utiliser le code ci-dessous pour supprimer des éléments dans le champ de référence dans Drupal 8:
/** @var \Drupal\Core\Entity\ContentEntityBase $entity */
$entity = \Drupal::entityTypeManager()->getStorage('node')->load($nid);
$tids = $entity->get('field_classrooms')->getValue();
$updatedTerms = [];
foreach($tids as $term) {
if ($term['target_id'] != 35)
$updatedTerms[] = ['target_id' => $term['target_id']];
}
$entity->field_notifications = $updatedTerms;
$entity->save();
En attendant, vous pouvez obtenir de l'aide de ce code -
$node = \Drupal\node\Entity\Node::load('1512');
// Removes '0' index element.
$node->set('field_classrooms', array_slice($node->get('field_classrooms')->getValue(), 1));
$node->save();
Vous pouvez supprimer le premier élément d'une liste en appelant simplement
$node->get('field_classrooms')->removeItem(0);