Quelle est la bonne façon de supprimer par programme une entrée de champ spécifique pour un champ à entrées multiples d'une entité spécifique? (ce sont des champs et des entités spécifiques, pas des types de champs ou des instances et des types d'entités)
Voici quelques possibilités que j'ai examinées et qui ne fonctionnent pas:
- Chargement de l'entité avec
entity_load()
, définition de l'entrée de champ sur = null ou = array (), puis enregistrement avecfield_attach_update()
. C'est le plus proche que j'ai trouvé, mais il laisse une entrée de champ nul zombie dans la base de données qui apparaît comme une ligne vide sur les formulaires jusqu'à ce que le formulaire soit enregistré ethook_field_is_empty()
puisse démarrer (hook_field_is_empty()
est configuré de telle sorte que = null ou = array () marquera comme vide). - Chargement de l'entité avec
entity_load()
, suppression de l'entrée de champ par clé, puis enregistrement avecfield_attach_update()
. Cela semble ne rien faire - il semble que Drupal interprète l'entrée comme n'étant pas là comme un signe pour ne pas la modifier. (étrangement, j'obtiens également parfois des délais d'expiration de temps de requête maximum en essayant cette approche) field_attach_delete()
- c'est beaucoup trop brutal: il tue tous les champs de l'entitéfield_purge_data()
- mieux, mais toujours trop brutal: il tue toutes les entrées du champ, pas les entrées spécifiques
Donc, pour clarifier, j'ai un code qui trouve (et charge) une entité qui a un champ qui a plusieurs entrées et trouve une entrée spécifique sur ce champ qui doit être supprimée. Je souhaite supprimer complètement cette entrée, sans toucher aucune autre entrée ni aucun autre champ de l'entité.