承接 dimoussa/doctrine-db-mapper-bundle 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dimoussa/doctrine-db-mapper-bundle

Composer 安装命令:

composer require dimoussa/doctrine-db-mapper-bundle

包简介

Bundle Symfony pour générer automatiquement des entités Doctrine depuis une base de données MySQL avec support complet des relations (OneToMany, ManyToOne, ManyToMany)

README 文档

README

Latest Stable Version License

English | Français

English

A Symfony bundle to automatically generate Doctrine entities from a MySQL database with full relationship support (OneToMany, ManyToOne, ManyToMany).

📦 Installation

composer require dimoussa/doctrine-db-mapper-bundle

⚙️ Configuration

Configure your MySQL connection in .env:

DATABASE_URL="mysql://user:password@localhost:3306/my_database"

🚀 Usage

Generate all entities

php bin/console dbmapper:generate-entities src/Entity

Generate a specific table

php bin/console dbmapper:generate-entities src/Entity --table=users

Preview pending schema diff (optional safety step before generation)

php bin/console dbmapper:generate-entities src/Entity --schema-preview

This shows the SQL Doctrine would run to align the database before entities are regenerated.

Regenerate without losing your custom code

When an entity file already exists, the bundle automatically merges the generated code with your existing file. Custom methods, non-ORM properties, interfaces, traits, and use statements are preserved.

# Regenerate all entities while preserving custom code
php bin/console dbmapper:generate-entities src/Entity --merge

# Regenerate a specific table only while preserving custom code
php bin/console dbmapper:generate-entities src/Entity --merge --table=users

📋 Output example

📊 Analyzing the database schema...
🔗 Analyzing relationships between tables...
  → ManyToMany association tables detected: user_roles, post_tags
⚙️  Generating entities and repositories...
⏭️  System table ignored: messenger_messages (configured in ignored_tables)
⏭️  Association table ignored: user_roles (handled as ManyToMany)
✅ User.php generated [2 OneToMany] [1 ManyToMany]
✅ Post.php generated [1 OneToMany] [1 ManyToMany]
✅ Comment.php generated
🧹 Clearing Symfony cache...
✅ Symfony cache cleared.
🔄 Synchronizing database with generated mapping...
✅ Database synchronized with Doctrine mapping.
✨ Generation completed successfully!

The bundle automatically synchronizes the database after generation to resolve cosmetic differences (index naming, textlongtext, etc.).

Manage the database (modify, view the schema...)

php bin/console dbmapper:modify-entities

Interactive mode example

The dbmapper:modify-entities command launches a fully interactive menu to manage your database schema:

[DbMapper] Interactive schema modification mode

What do you want to do?
  [0] List tables
  [1] Choose a table to modify
  [2] Show current change plan
  [3] Preview SQL to be executed
  [4] Apply changes to the database
  [5] Quit
 > 1

Choose a table to modify:
  [0] users
  [1] posts
  [2] comments
 > 0

Selected table: users
What do you want to do?
  [0] View attributes (columns)
  [1] Add a new attribute
  [2] Manage relations
  [3] Back to main menu
 > 0

Columns of the table users:
 - id (integer), nullable: NO
 - username (string), nullable: NO
 - email (string), nullable: NO
 - created_at (datetime), nullable: YES

Selected table: users
What do you want to do?
  [0] View attributes (columns)
  [1] Add a new attribute
  [2] Manage relations
  [3] Back to main menu
 > 1

New attribute (column) name: avatar
Doctrine type (e.g.: string, integer, text, boolean, datetime, float, decimal): string
Can this attribute be NULL?
  [0] no
  [1] yes
 > 1

New column summary:
 - Table : users
 - Name  : avatar
 - Type  : string
 - NULL  : yes
Confirm adding this column to the change plan?
  [0] no
  [1] yes
 > 1

Column added to the change plan (no actual changes made yet).

What do you want to do?
  [0] List tables
  [1] Choose a table to modify
  [2] Show current change plan
  [3] Preview SQL to be executed
  [4] Apply changes to the database
  [5] Quit
 > 3

SQL queries to be executed:
  ALTER TABLE users ADD avatar VARCHAR(255) DEFAULT NULL;

 > 4

Change plan:
 - [ADD COLUMN] Table users : avatar (string), nullable: yes

SQL queries to be executed:
  ALTER TABLE users ADD avatar VARCHAR(255) DEFAULT NULL;

Are you sure you want to apply these changes to the database?
  [0] no
  [1] yes
 > 1

Applying changes...
✓ All changes have been applied successfully!
 ✓ ALTER TABLE users ADD avatar VARCHAR(255) DEFAULT NULL

The change plan has been cleared.

✨ What the bundle generates

  • ✅ Doctrine entities with correct PHP types
  • ✅ Automatic relationships (OneToMany, ManyToOne, ManyToMany)
  • ✅ Smart AUTO_INCREMENT detection (no forced changes on non-auto-increment PKs)
  • ✅ Correct ManyToMany composite PK ordering (matches the real database)
  • ✅ Getters and setters
  • add/remove methods for collections
  • ✅ Repositories
  • ✅ Smart entity merging on regeneration (preserves custom methods, non-ORM properties, interfaces, traits, and use statements)
  • ✅ Automatic post-generation database synchronization (handles index renaming, type adjustments, and composite PK changes with FK constraints)

📝 Requirements

  • PHP >= 8.1
  • Symfony ^6.0 | ^7.0
  • Doctrine ORM ^2.14 | ^3.0
  • MySQL/MariaDB database

📄 License

MIT

👤 Author

Diallo Moussa

Français

Bundle Symfony pour générer automatiquement des entités Doctrine depuis une base de données MySQL avec support complet des relations (OneToMany, ManyToOne, ManyToMany).

📦 Installation

composer require dimoussa/doctrine-db-mapper-bundle

⚙️ Configuration

Configurez votre connexion MySQL dans .env :

DATABASE_URL="mysql://user:password@localhost:3306/ma_base"

🚀 Utilisation

Générer toutes les entités

php bin/console dbmapper:generate-entities src/Entity

Générer une table spécifique

php bin/console dbmapper:generate-entities src/Entity --table=users

Prévisualiser le diff SQL (optionnel avant la génération)

php bin/console dbmapper:generate-entities src/Entity --schema-preview

Affiche les requêtes SQL que Doctrine exécuterait pour synchroniser la base avant la régénération des entités.

Régénérer sans perdre votre code custom

Lorsqu'un fichier d'entité existe déjà, le bundle fusionne automatiquement le code généré avec le fichier existant. Les méthodes custom, les propriétés non-ORM, les interfaces, les traits et les use statements sont préservés.

# Régénérer toutes les entités en préservant le code custom
php bin/console dbmapper:generate-entities src/Entity --merge

# Régénérer une table spécifique uniquement en préservant le code custom
php bin/console dbmapper:generate-entities src/Entity --merge --table=users

📋 Exemple de sortie

📊 Analyse du schéma de la base de données...
🔗 Analyse des relations entre tables...
  → Tables d'association ManyToMany détectées: user_roles, post_tags
⚙️  Génération des entités et repositories...
⏭️  Table système ignorée: messenger_messages (configurée dans ignored_tables)
⏭️  Table d'association ignorée: user_roles (gérée comme ManyToMany)
✅ User.php généré [2 OneToMany] [1 ManyToMany]
✅ Post.php généré [1 OneToMany] [1 ManyToMany]
✅ Comment.php généré
🧹 Nettoyage du cache Symfony...
✅ Cache Symfony nettoyé avec succès.
🔄 Synchronisation de la base de données avec le mapping généré...
✅ Base de données synchronisée avec le mapping Doctrine.
✨ Génération terminée avec succès !

Le bundle synchronise automatiquement la base après génération pour résoudre les différences cosmétiques (nommage d'index, textlongtext, etc.).

Gérer la base de donnée (modification, visualisation de la base...)

php bin/console dbmapper:modify-entities

Exemple du mode interactif

La commande dbmapper:modify-entities lance un menu entièrement interactif pour gérer le schéma de votre base de données :

[DbMapper] Mode interactif de modification du schéma

Que veux-tu faire ?
  [0] Lister les tables
  [1] Choisir une table à modifier
  [2] Afficher le plan des changements en cours
  [3] Prévisualiser le SQL qui sera exécuté
  [4] Appliquer les changements dans la base de données
  [5] Quitter
 > 1

Choisis une table à modifier :
  [0] users
  [1] posts
  [2] comments
 > 0

Table sélectionnée : users
Que veux-tu faire ?
  [0] Voir les attributs (colonnes)
  [1] Ajouter un nouvel attribut
  [2] Gérer les relations
  [3] Revenir au menu principal
 > 0

Colonnes de la table users :
 - id (integer), nullable: NO
 - username (string), nullable: NO
 - email (string), nullable: NO
 - created_at (datetime), nullable: YES

Table sélectionnée : users
Que veux-tu faire ?
  [0] Voir les attributs (colonnes)
  [1] Ajouter un nouvel attribut
  [2] Gérer les relations
  [3] Revenir au menu principal
 > 1

Nom du nouvel attribut (colonne) : avatar
Type Doctrine du nouvel attribut (ex: string, integer, text, boolean, datetime, float, decimal) : string
Ce nouvel attribut peut-il être NULL ?
  [0] non
  [1] oui
 > 1

Récapitulatif de la nouvelle colonne :
 - Table : users
 - Nom   : avatar
 - Type  : string
 - NULL  : oui
Confirmer l'ajout de cette colonne au plan de changements ?
  [0] non
  [1] oui
 > 1

Colonne ajoutée au plan de changements (aucune modification réelle effectuée pour l'instant).

Que veux-tu faire ?
  [0] Lister les tables
  [1] Choisir une table à modifier
  [2] Afficher le plan des changements en cours
  [3] Prévisualiser le SQL qui sera exécuté
  [4] Appliquer les changements dans la base de données
  [5] Quitter
 > 3

Requêtes SQL qui seront exécutées :
  ALTER TABLE users ADD avatar VARCHAR(255) DEFAULT NULL;

 > 4

Plan de changements :
 - [ADD COLUMN] Table users : avatar (string), nullable: oui

Requêtes SQL qui seront exécutées :
  ALTER TABLE users ADD avatar VARCHAR(255) DEFAULT NULL;

Êtes-vous sûr de vouloir appliquer ces changements dans la base de données ?
  [0] non
  [1] oui
 > 1

Application des changements...
✓ Tous les changements ont été appliqués avec succès !
 ✓ ALTER TABLE users ADD avatar VARCHAR(255) DEFAULT NULL

Le plan de changements a été vidé.

✨ Ce que le bundle génère

  • ✅ Entités Doctrine avec types PHP corrects
  • ✅ Relations automatiques (OneToMany, ManyToOne, ManyToMany)
  • ✅ Détection intelligente de l'AUTO_INCREMENT (pas de modification forcée sur les PK non auto-incrémentées)
  • ✅ Ordre correct des PK composites ManyToMany (correspond à la base réelle)
  • ✅ Getters et setters
  • ✅ Méthodes add/remove pour les collections
  • ✅ Repositories
  • ✅ Fusion intelligente des entités lors d'une régénération (préserve les méthodes custom, les propriétés non-ORM, les interfaces, les traits et les use statements)
  • ✅ Synchronisation automatique post-génération (gère le renommage d'index, les ajustements de types et les changements de PK composites avec contraintes FK)

📝 Prérequis

  • PHP >= 8.1
  • Symfony ^6.0 | ^7.0
  • Doctrine ORM ^2.14 | ^3.0
  • Base de données MySQL/MariaDB

📄 Licence

MIT

👤 Auteur

Diallo Moussa

Latest Stable Version Total Downloads License PHP Version Symfony

dimoussa/doctrine-db-mapper-bundle 适用场景与选型建议

dimoussa/doctrine-db-mapper-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 88 次下载、GitHub Stars 达 2, 最近一次更新时间为 2026 年 01 月 13 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「database」 「orm」 「symfony」 「generator」 「mysql」 「bundle」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 dimoussa/doctrine-db-mapper-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 dimoussa/doctrine-db-mapper-bundle 我们能提供哪些服务?
定制开发 / 二次开发

基于 dimoussa/doctrine-db-mapper-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 88
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 30
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-13