[résolu] Comment utiliser db_update ou db_query dans nos propres modules

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,
J'ai crée un petit module pour surcharger la fonction _node_update().
Elle s'éxecute si je me contente de dupal_set_message() par exemple;
mais je voudrais meetre à jour des champs de la base de données et là c'est bien plus compliqué.

L'objectif :
Lors de la (dé)publication d'un noeud de type "projet", je voudrais appliquer cette modification à tous ses noeuds fils (liés par entity reference) de type "video".
La requête suivante fonctionne dans phpMyAdmin mais pas du tout autrement; voici le code:

function easy_admin_node_update($node) {

        if ((isset($node->type)) && ($node->type == 'projet')) {

                if (($node->original->status == 0) && ($node->status == 1)) {

                        db_query("UPDATE {node} n, {field_data_field_projet} fdfp SET n.status=1 WHERE n.type = 'video' AND n.status =0 AND fdfp.entity_id = n.nid AND fdfp.field_projet_target_id = :nid", array(':nid'=>$node->nid));

                }
                else {

                        db_query("UPDATE {node} n, {field_data_field_projet} fdfp SET n.status=0 WHERE n.type = 'video' AND n.status =1 AND fdfp.entity_id = n.nid AND fdfp.field_projet_target_id = :nid", array(':nid'=>$node->nid));

                }

        }

}

Je ne comprends pas comment les fonctions db_update et db_query fonctionne, je crois.
Merci de votre aide.

Forum : 
Version de Drupal : 

J'ai essayé d'utiliser la forme objet décrite dans la doc : db_update (D7)
Cela donne:

function easy_admin_node_update($node) {
        if ((isset($node->type)) && ($node->type == 'projet')) {
                if (($node->original->status == 0) && ($node->status == 1)) {
                        $result = db_update('node')
                                        ->fields(array('status'=>1))
                                        ->condition('nid', 670, '=')
                                        ->execute();
                }
                else {
                        $result = db_update('node')
                                        ->fields(array('status'=>0))
                                        ->condition('nid', 670, '=')
                                        ->execute();
                }
        }
}

Cela ne fonctionne toujours pas.
Je comprend pas; en général, dans ces cas là, j'oublie un truc tout simple mais je vois pas ...