Créez les schémas pour les produits et les catégories, et reliez-les dans Strapi 5.
Dans Strapi, chaque Content Type correspond à un schéma JSON qui décrit sa structure et ses relations. Ici, on va créer un type categorie-de-produit
pour organiser les produits de ta boutique.
1{2"kind": "collectionType",3"collectionName": "categorie_de_produits",4"info": {5"singularName": "categorie-de-produit", // ^? Identifiant unique6"pluralName": "categorie-de-produits",7"displayName": "Catégorie de produit"8},9"options": {10"draftAndPublish": true // ^? Permet le mode brouillon11},12"attributes": {13"name": {14"type": "string",15"required": true // @callout: Chaque catégorie doit avoir un nom16},17"products": {18"type": "relation",19"relation": "manyToMany",20"target": "api::produit.produit", // ^? Cible le modèle produit21"inversedBy": "categories" // @callout: Inverse the mapping22}23}24}
Le mode draftAndPublish
te donne la flexibilité de travailler en mode brouillon
avant de rendre une catégorie visible en production.
kind: "collectionType"
indique que tu gères plusieurs entrées.name
est un champ simple string.products
établit une relation many-to-many avec le modèle produit
.inversedBy
doit correspondre au champ categories
du modèle cible.Passons au cœur de ton e-commerce : le modèle Produit. Il regroupe toutes les infos (nom, description, prix, image) et les relations vers les catégories.
1{2"kind": "collectionType",3"collectionName": "produits",4"info": {5"singularName": "produit",6"pluralName": "produits",7"displayName": "Produit",8"description": "Contient les infos d’un article"9},10"options": {11"draftAndPublish": true12},13"attributes": {14"name": {15"type": "string",16"required": true17},18"description": {19"type": "text"20},21"price": {22"type": "integer",23"min": 0,24"default": 025},26"image": {27"type": "media",28"multiple": false,29"allowedTypes": ["images"]30},31"slug": {32"type": "uid",33"targetField": "name",34"required": true35},36"categories": {37"type": "relation",38"relation": "manyToMany",39"target": "api::categorie-de-produit.categorie-de-produit",40"mappedBy": "products" // ^? Renvoie à la clé inversée41},42"stock": {43"type": "integer",44"default": 0,45"required": true46},47"devStripeProductId": {48"type": "string",49"unique": true,50"private": true51},52"stripeProductId": {53"type": "string",54"unique": true,55"private": true56}57}58}
slug
: génère une URL friendly à partir du nom.private
sont invisibles via l’API publique.products
inversedBy categories
.categories
mappedBy products
.Cette configuration crée une table de jonction automatique dans la base de données, sans que tu aies à gérer manuellement la migration SQL.
Si tu veux ajouter des métadonnées à cette relation (ex. addedAt
), tu bascules sur un component
ou créés explicitement un composant de liaison dans Strapi.
src/api/<type>/schema.json
.draftAndPublish
active le cycle vie brouillon/publication.uid
pour générer automatiquement un slug
basé sur un champ cible.private
ne sont pas exposés dans l’API publique.marque
avec un champ name
(string) et une relation one-to-many vers produit
.produit
pour ajouter un champ rating
(decimal, min 0, max 5, default 0).Liens utiles :