Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Doctrine Data Fixtures Extension Laravel Package

vipsoft/doctrine-data-fixtures-extension

Doctrine Data Fixtures extension for Laravel Doctrine that brings fixture loading to Laravel. Seed your database with test or demo data via Artisan, making it easy to manage repeatable fixtures for development, testing, and staging environments.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. This is not a Laravel package — it is a Behat extension that wires Doctrine's DataFixtures loader into the Behat lifecycle so fixtures can be loaded (and purged) around scenarios. Its dependency graph assumes a Symfony-style DI container (symfony/dependency-injection, compiler passes), Behat's extension API, and Doctrine's persistence interfaces (Doctrine\Common\Persistence\ObjectManager, the ORM/ODM/DBAL fixture loaders). A typical Laravel application uses Eloquent, PHPUnit/Pest, and RefreshDatabase/DatabaseTransactions, so the package sits orthogonally to the default stack: adopting it implies running Behat and Doctrine alongside (or instead of) the framework's native testing and data layers.

Integration feasibility. Technically possible — Laravel Doctrine bridges exist (laravel-doctrine/orm), and Behat can be bootstrapped against a Laravel container — but every layer of the chain is a bolt-on: Behat instead of Pest, Doctrine instead of Eloquent for the fixture-managed entities, and a 2017-era extension binding them. The cost is not "composer require"; it is a parallel persistence and test-harness story that the team would own indefinitely.

Technical risk. High. The last release was January 2017, targeting Behat 3.x and Symfony 2/3-era DI, with Doctrine\Common persistence namespaces that were deprecated and removed in later Doctrine versions. It is very unlikely to install cleanly on PHP 8.x, Symfony 5/6, or current Doctrine data-fixtures (v2/v3), which changed service definitions and loader signatures. The extension API for Behat has also evolved. Realistically an integration would require forking and pinning, which converts a package dependency into maintained internal code. With 21 stars and zero dependents, there is no signal of use in the wild, meaning no community-discovered workarounds and no downstream forks to borrow from.

Key questions.

  • Do we actually need Behat, or is this an inherited test suite we can retire in favor of Pest/PHPUnit?
  • Is Doctrine already a first-class persistence layer in this app, or would this introduce a second one alongside Eloquent?
  • What is the migration cost for the existing Behat feature suite relative to rewriting the fixture layer natively?
  • Can we achieve the same outcome with doctrine/data-fixtures plus a bespoke Behat context (roughly 150 lines) rather than a stale extension?
  • What PHP/Behat/Doctrine versions are we locked to, and is the 2017 codebase installable at all under them?

Integration Approach

Stack fit. Poor for a greenfield Laravel product; acceptable only in a legacy Symfony/Doctrine/Behat codebase, or a Laravel app that has already, deliberately, adopted Doctrine as its ORM and Behat as its BDD layer. In the common case the correct stack fit is: fakerphp/faker + Eloquent factories + RefreshDatabase for unit/integration, and optionally Behat with a custom Laravel context for BDD. For richer fixture graphs, nelmio/alice / hautelook/alice-bundle or direct doctrine/data-fixtures usage are maintained alternatives.

Migration path. Two viable routes, both of which avoid adopting the package:

  1. Replace with native Laravel testing. Map Behat scenarios to Pest/PHPUnit feature tests, replace fixture YAML/PHP loaders with factories and seeders, and use RefreshDatabase. Highest long-term value; requires rewriting scenario coverage.
  2. Keep Behat, replace the extension. Write an internal Behat context (or a small extension) that boots the Laravel kernel and invokes Artisan::call('db:seed'), $this->artisan(...), or a direct doctrine/data-fixtures Loader call inside a transaction. This is a bounded, testable amount of code that the team controls and can keep current.

If forced to adopt the package (e.g., a hard dependency from an inherited suite), isolate it: pin PHP/Behat/Symfony versions in a dedicated CI image, vendor the fork, and treat it as frozen.

Compatibility. Expect friction on PHP ≥7.2, Behat ≥3.5, Symfony ≥4, and Doctrine data-fixtures ≥2. The package predates PSR-11 container standardization and the removal of Doctrine\Common\Persistence. A compatibility fork is likely mandatory, not optional.

Sequencing.

  1. Inventory existing Behat features and fixture definitions; quantify coverage and blast radius.
  2. Decide Behat retention (strategic) before deciding tooling (tactical) — this package only matters if Behat stays.
  3. If Behat stays: spike an internal fixture context against the current Laravel + PHP version; timebox to a day.
  4. If the spike succeeds, adopt the internal context and deprecate the package.
  5. If Behat goes: migrate scenarios to Pest, replace fixtures with factories/seeders, delete the Behat toolchain.
  6. Only pursue the package itself if steps 3–4 fail and a fork is explicitly resourced with an owner and a sunset date.

Operational Impact

Maintenance. Effectively unmaintained. No releases since 2017, no dependents, minimal star count — signals of an abandoned side project rather than a supported library. There is no security-response path, no PHP 8 compatibility work, and no maintainer incentive to accept PRs. Any use means the team owns the code, the fork, and the upgrade treadmill, with no upstream to lean on.

Support. None beyond reading the source. Issue triage, documentation, and examples are all dated. Onboarding relies on whoever wrote the fork. Budget for internal documentation as a first-class deliverable, not an afterthought.

Scaling. For small suites (tens of scenarios) the per-scenario purge-and-load model is workable but slow — fixture loading dominates runtime, and there is no parallelism story (Paratest-style sharding conflicts with shared database state). At hundreds of scenarios the suite becomes a CI bottleneck. Transactional wrapping mitigates truncation cost but interacts poorly with tests that exercise commits, queued jobs, or multi-connection writes — a real concern in Laravel apps.

Failure modes.

  • Bootstrap failure: DI/container or Behat extension API mismatch aborts the entire suite before any test runs — noisy and easy to misdiagnose.
  • Silent fixture drift: fixtures reference entities/schema that have moved; loading succeeds partially or fails late, producing confusing assertion errors rather than fixture errors.
  • State leakage: incomplete purges between scenarios cause order-dependent, non-reproducible failures — the classic Behat/Doctrine pain point, and worse when a Laravel app writes through a different connection than the fixture loader purges.
  • Version lock: security patching of PHP or Symfony forces an emergency fork upgrade precisely when the team has least capacity.
  • Second source of truth: fixtures diverge from Eloquent factories, so test data definitions multiply and rot independently.

Ramp-up. Low for an engineer already fluent in Behat + Doctrine (the mental model is small). High for everyone else — it is a specialized testing dialect the team likely does not use elsewhere. Expect 1–2 days for a Doctrine/Behat-fluent engineer to evaluate and spike, plus ongoing cognitive tax for every engineer who touches the suite. Given zero dependents, there is no external tutorial ecosystem to shorten that curve.

Recommendation. Do not adopt. The package is a 2017 artifact whose value proposition — Doctrine fixtures inside Behat — is better served by a small internal Behat context or, preferably, by retiring Behat in favor of Laravel's native Pest/PHPUnit + factories/seeders testing model. The score (1.425) and absence of dependents accurately reflect a package that should be replaced, not integrated.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource