Comment supprimer un champ de type entity reference en code

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous, je vous expose mon problème:
J'ai déjà cherché un peu partotu sur le net des solutions mais il s'avère que ces solutions ne correspondent pas à mon problème.
Voici j'ai créé mon propre module, en créant aussi mes propres types de contenu utilisés avec "Entity Reference".Chacun de mes types de contenu sont liés entre eux par un champ de type entity reference. Voici brièvement un exemple de l'agencement de mes types de contenus. (ResponsableA,B ,SessionA1,B1 et ApprenantA1-1,etc sont chacun des types de contenu) :

ResponsableA -> SessionA1-> ApprenantA1-1

ResponsableB-> SessionB1-> ApprenantB1-1

Maintenant si je veux supprimer comme contenu la node de type "SessionA1" ça ne marche pas.

Dans mon custom module j'ai fait une fonction pour supprimer les nodes que je veux. Voici le code que j'ai écris:


    function supprimer_submit_yes($recup_arg, &$form_state){
   
        $recup_arg = arg(4);

        $query = new EntityFieldQuery();
   
   $query->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', 'responsable_p')
    ->propertyCondition('status', 1)
  ->fieldCondition('field_ref_session', 'target_id', $recup_arg)
  ->range(0,1);
   $result = $query->execute();
   
   if (!empty($result['node'])) {
       $nid_responsable = array_shift(array_keys($result['node']));
     //$nodes = node_load_multiple($nids);
      //$items = entity_load('node', $nid_responsable);
        $node=node_load($nid_responsable);
}
 
  
   $ewrapper = entity_metadata_wrapper('node', $node);
 
   unset($ewrapper->field_ref_session);
    $ewrapper->save();

    }

Dans mon code premièrement, j'obtiens l'argument de la page actuelle avec arg(): cela contient le nid que j'ai besoin de récupérer. Ici dans l'exemple j'obtiens le nid de "SessionA1".

Après j'utilise la fonction EntityFieldQuery() pour obtenir le nid de la node parent de "SessionA1". Ici la node parent est "RespnsableA". Ensuite je fais un "fieldCondition" pour cibler le champ qui contient "SessionA1", ici c'est "field_ref_session".
Une fois que j'ai le nid de "ResponsableA", je charge la node correspondant pour supprimer le champ qui contient "SessionA1".

J'ai créé une fonction pour supprimer le champ en question. Cette fonction est lancée grâce a un bouton sur un "modal form"
créé en utilisant CTools. Une fois le bouton appuyé, il y a bien une petite animation de chargement comme s'il se passait quelques chose mais en réalité rien ne se fait. Le contenu voulu "SessionA1" n'est pas supprimé.

J'ai eu l'occasion d'utiliser d'autres fonctions "node_delete($nid)" et d'autres manières (notamment sur ce lien: http://drupal.stackexchange.com/questions/66963/how-do-you-clear-a-field...) pour supprimer la node que je veux mais sans succès.

Si quelqu'un peut m'aider et m'éclairer j'apprécierai énormément.

Version de Drupal :