Clés étrangères pour l’insertion des données initiales dans des tables personnalisées sous WordPress

Lorsqu'un thème ou une extension doit se charger d'insérer des données initiales dans ses tables personnalisées, il faut porter une attention particulière aux clés étrangères. Par exemple, si on a une table de produits et une table de catégories, comment savoir quel identifiant a été utilisé pour la catégorie X à laquelle un produit doit être associé ?

▼Publicité

Il n'est pas possible de présumer que la première catégorie enregistrée portera l'identifiant 1 car il se pourrait que des données aient déjà été enregistrées puis effacées de cette table.

Identifiants codés en dur

Une façon de s'assurer de la valeur d'une clé primaire est de coder sa valeur en dur lors de l'insertion. Mais attention : il faut être certain qu'aucun enregistrement de la table n'utilise cette valeur sinon, l'insertion n'aura pas lieu.

Ex :

WordPress (PHP)

$reussite = $wpdb->insert(

    $nom_table,

    array(

        'matable_id'          => 1,

        'matable_description' => 'blablabla',

        'matable_autrechamp'  => 1

    ),

    array(

        '%d',

        '%s',

        '%d'

    )

);

 

if ( $reussite ) {

    $reussite = $wpdb->insert(

        $nom_autre_table,

        array(

            'autretable_id'          => 1,

            'autretable_autre_champ' => 'abc',

            'autretable_matable_id'  => 1

        ),

        array(

            '%d',

            '%s',

            '%d'

        )

    );

}

 

if ( ! $reussite ) {

    // réagir en cas de problème

    monprefixe_log_me( $wpdb->last_error );

    // ...

}

Retrouver l'identifiant après insertion

Une autre technique, plus versatile, consiste à retrouver l'identifiant d'une table à l'aide de $wpdb->insert_id puis d'utiliser cette valeur comme clé étrangère.

Ex :

WordPress (PHP)

$reussite = $wpdb->insert(

    $nom_table,

    array(

        'matable_description' => 'blablabla',

        'matable_autrechamp'  => 1

    ),

    array(

        '%s',

        '%d'

    )

);

 

$nouveau_id = $wpdb->insert_id;

 

if ( $reussite ) {

    $reussite = $wpdb->insert(

        $nom_autre_table,

        array(

            'autretable_id'          => 1,

            'autretable_autre_champ' => 'abc',

            'autretable_matable_id'  => $nouveau_id

        ),

        array(

            '%d',

            '%s',

            '%d'

        )

    );

}

 

if ( ! $reussite ) {

    // réagir en cas de problème

    monprefixe_log_me( $wpdb->last_error );

    // ...

}

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories