web-dev-qa-db-fra.com

Faire face à de nombreuses valeurs méta, 30 ans et plus

J'ai un type de message "Listing" avec plus de 30 clés méta, ce qui, à mon avis, peut créer des tensions dans la base de données lorsqu'il y a plus de 100 messages. Habituellement, ce que je fais est de sauvegarder chaque méta valeur 1 par 1 comme suit:

if(isset($_POST['_item_stock']) && !empty($_POST['_item_stock']))
    update_post_meta($post_id, '_item_stock', sanitize_text_field($_POST['_item_stock']));
else
    delete_post_meta($post_id, '_item_stock');

Je le fais parce que si j’ai besoin de plus de contrôle sur la validation, je l’ai. C'est organisé et Nice cherche dans le code. L'inconvénient étant qu'il est long et qu'il enregistre chaque méta individuellement dans la base de données.

Mon autre option est de standardiser toutes mes méta dans un tableau, puis de le sérialiser. L'inconvénient de cette méthode est que je ne peux exécuter aucune méta-requête sur des données sérialisées. Par conséquent, le filtrage des recherches ou le classement des commandes est en dehors de la fenêtre.

La dernière option consiste à faire la moitié et la moitié, à sérialiser ce dont je n'ai pas besoin pour les requêtes et tout ce que je sauvegarde individuellement. Bien que cela puisse économiser quelques frais généraux, je ne veux pas que ça paraisse en désordre dans mon code ou que je sois déconnecté.

Ma question est la suivante: comment gérez-vous normalement les messages contenant plusieurs méta-clés? La surcharge de la base de données est-elle aussi importante que je l'imagine lorsque j'enregistre chaque clé méta individuellement? Quelle méthode pensez-vous être la meilleure et pourquoi?

5
Howdy_McGee

Vous faites face à un problème XY . La seule raison pour enregistrer les méta-valeurs sous la forme d'une seule ligne serait le cas échéant. Si vous avez besoin de règles de nettoyage spécifiques, utilisez filter_var_array() ou désinfectez les valeurs, puis créez le tableau et sauvegardez-le.

Résumé avec un exemple complet de filter_var_array() ici .

5
kaiser