tourze / doctrine-direct-insert-bundle
Symfony Bundle for direct database insertion of objects
Installs: 5 974
Dependents: 6
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/tourze/doctrine-direct-insert-bundle
Requires
- doctrine/dbal: ^4.0
 - doctrine/doctrine-bundle: ^2.13
 - doctrine/orm: ^3.0
 - doctrine/persistence: ^4.1
 - symfony/config: ^7.3
 - symfony/dependency-injection: ^7.3
 - symfony/doctrine-bridge: ^7.3
 - symfony/framework-bundle: ^7.3
 - symfony/http-kernel: ^7.3
 - symfony/property-access: ^7.3
 - symfony/yaml: ^7.3
 - tourze/bundle-dependency: 1.*
 - tourze/doctrine-entity-checker-bundle: 1.0.*
 - tourze/symfony-dependency-service-loader: 1.*
 
Requires (Dev)
- phpstan/phpstan: ^2.1
 - phpunit/phpunit: ^11.5
 - symfony/phpunit-bridge: ^7.3
 - tourze/phpunit-symfony-kernel-test: 1.0.*
 - tourze/phpunit-symfony-unit-test: 1.*
 - yiisoft/strings: ^2.1
 
This package is auto-updated.
Last update: 2025-11-02 05:56:01 UTC
README
A Symfony bundle that provides direct database insertion capabilities for Doctrine entities without using the ORM's persist/flush mechanism.
This bundle is designed for high-performance scenarios where you need to insert data directly into the database.
Features
- Direct database insertion without ORM overhead
 - Support for auto-generated and preset IDs
 - Dedicated database connection support
 - Compatible with various data types (string, text, integer, float, boolean, nullable fields)
 - Automatic SQL generation based on entity metadata
 
Installation
composer require tourze/doctrine-direct-insert-bundle
Configuration
Add the bundle to your config/bundles.php:
<?php return [ // ... other bundles Tourze\DoctrineDirectInsertBundle\DoctrineDirectInsertBundle::class => ['all' => true], ];
Quick Start
Basic Usage
<?php use Tourze\DoctrineDirectInsertBundle\Service\DirectInsertService; class MyController { public function __construct( private readonly DirectInsertService $directInsertService ) { } public function createEntity(): Response { $entity = new MyEntity(); $entity->setName('Example Name'); $entity->setEmail('example@example.com'); // Insert directly into database and get the ID $id = $this->directInsertService->directInsert($entity); return new JsonResponse(['id' => $id]); } }
With Preset ID
<?php $entity = new MyEntity(); $entity->setId(12345); // Set a specific ID $entity->setName('Example with preset ID'); $returnedId = $this->directInsertService->directInsert($entity); // $returnedId will be 12345
Entity Example
<?php use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Table(name: 'my_entity')] class MyEntity { #[ORM\Id] #[ORM\Column(type: Types::INTEGER)] #[ORM\GeneratedValue(strategy: 'IDENTITY')] private ?int $id = null; #[ORM\Column(type: Types::STRING, length: 255)] private string $name; #[ORM\Column(type: Types::STRING, length: 255)] private string $email; // ... getters and setters }
Advanced Usage
Dedicated Connection
This bundle supports dedicated database connections using the @WithDedicatedConnection attribute. The service uses a dedicated connection channel called direct_insert for improved performance and isolation.
Data Type Support
The bundle supports all standard Doctrine data types:
- String and Text types
 - Integer and Float types
 - Boolean types
 - Nullable fields
 - Auto-generated IDs
 - Preset IDs
 
Performance Benefits
- No ORM Overhead: Bypasses Doctrine's Unit of Work for faster insertions
 - Dedicated Connection: Uses a separate database connection to avoid conflicts
 - Direct SQL: Generates optimized INSERT statements directly
 - Batch Operations: Suitable for high-volume data insertion scenarios
 
Requirements
- PHP 8.1+
 - Symfony 6.4+
 - Doctrine ORM 3.0+
 - Doctrine DBAL 4.0+
 
Dependencies
This bundle depends on:
tourze/doctrine-entity-checker-bundle- For SQL formatting utilities
License
This bundle is licensed under the MIT License. See the LICENSE file for details.