ArtisanCMS utilise Eloquent ORM avec 37 modèles, 45 migrations et un préfixe cms_ sur toutes les tables. Cette page décrit la structure de la base de données et les relations entre les entités.
Modèle Table Description Pagecms_pagesPages du site (soft deletes) Postcms_postsArticles de blog (soft deletes) ContentTypecms_content_typesTypes de contenu personnalisés Revisioncms_revisionsHistorique des révisions (polymorphique) Blockcms_blocksBlocs du Page Builder BlockPatterncms_block_patternsModèles de blocs réutilisables GlobalSectioncms_global_sectionsSections globales (header, footer) Popupcms_popupsPopups et modales Widgetcms_widgetsWidgets de sidebar/footer
Modèle Table Description Taxonomycms_taxonomiesDéfinition des taxonomies Termcms_termsTermes (catégories, tags) Termablecms_termablesTable pivot polymorphique
Modèle Table Description Mediacms_mediaFichiers médias uploadés MediaFoldercms_media_foldersDossiers de la bibliothèque
Modèle Table Description Usercms_usersUtilisateurs du CMS Rolecms_rolesRôles avec permissions JSON
Modèle Table Description Menucms_menusMenus de navigation MenuItemcms_menu_itemsÉléments de menu Redirectcms_redirectsRedirections 301/302 FormEntrycms_form_entriesSoumissions de formulaires
Modèle Table Description Themecms_themesThèmes installés Plugincms_pluginsPlugins installés Settingcms_settingsParamètres clé-valeur CustomFieldcms_custom_fieldsChamps personnalisés (polymorphique) DesignTokencms_design_tokensTokens de design Brandingcms_brandingsConfiguration de la marque
Modèle Table Description ActivityLogcms_activity_logsJournal d’activité Commentcms_commentsCommentaires Notificationcms_notificationsNotifications EmailTemplatecms_email_templatesTemplates d’emails Newslettercms_newslettersCampagnes newsletter NewsletterSubscribercms_newsletter_subscribersAbonnés newsletter Webhookcms_webhooksConfiguration des webhooks AnalyticPageViewcms_analytic_page_viewsVues de pages brutes AnalyticAggregationcms_analytic_aggregationsDonnées agrégées SearchIndexcms_search_indexIndex de recherche ContentLockcms_content_locksVerrous d’édition Sitecms_sitesSites (multi-site)
Les révisions et les champs personnalisés utilisent des relations polymorphiques pour s’attacher à tout type de contenu.
class Revision extends Model
public function revisionable () : MorphTo
// Utilisation depuis Page ou Post
public function revisions () : MorphMany
return $this-> morphMany ( Revision :: class , ' revisionable ' );
Les termes de taxonomie sont liés au contenu via la table pivot polymorphique cms_termables.
public function terms () : MorphToMany
return $this-> morphToMany ( Term :: class , ' termable ' , ' cms_termables ' );
Le modèle ContentLock empêche l’édition simultanée d’un même contenu.
class ContentLock extends Model
public function lockable () : MorphTo
public function user () : BelongsTo
return $this-> belongsTo ( User :: class );
Trait Description HasContentFeaturesAjoute les révisions, champs personnalisés, SEO, statut de publication HasSiteScopeFiltre automatiquement les requêtes par site actif (multi-site) LogsActivityEnregistre automatiquement les actions dans le journal d’activité SoftDeletesSuppression douce sur Page et Post
use HasContentFeatures , HasSiteScope , LogsActivity , SoftDeletes ;
Les 45 migrations sont exécutées lors de l’installation et suivent les conventions Laravel. Toutes les tables utilisent le préfixe cms_.
# Exécuter les migrations
# Voir le statut des migrations
php artisan migrate:status
ArtisanCMS fournit 18 factories pour générer des données de test.
// Créer une page publiée
$page = Page :: factory () -> published () -> create ();
// Créer 10 articles avec des catégories
$posts = Post :: factory () -> count ( 10 ) -> withCategories () -> create ();
// Créer un utilisateur avec un rôle
$admin = User :: factory () -> admin () -> create ();
// Créer un média avec un fichier image
$media = Media :: factory () -> image () -> create ();
Les factories disponibles couvrent : Page, Post, User, Role, Media, MediaFolder, Menu, MenuItem, Term, Taxonomy, Comment, Block, Widget, Popup, Notification, EmailTemplate, Newsletter et FormEntry.
Seeder Description DatabaseSeederOrchestre tous les seeders RoleSeederCrée les rôles par défaut (admin, éditeur, auteur, contributeur) BlockSeederEnregistre les blocs intégrés dans la base SettingsSeederInitialise les paramètres par défaut du CMS
# Exécuter tous les seeders
# Exécuter un seeder spécifique
php artisan db:seed --class=RoleSeeder
├── cms_pages ──── cms_revisions (polymorphique)
│ ├── cms_termables ──── cms_terms ──── cms_taxonomies
│ ├── cms_custom_fields (polymorphique)
├── cms_posts ──── cms_revisions (polymorphique)
│ ├── cms_termables ──── cms_terms
│ ├── cms_custom_fields (polymorphique)
├── cms_media ──── cms_media_folders