dotkernel / dot-data-fixtures
Provides a CLI interface for listing & executing doctrine data fixtures
Installs: 10 912
Dependents: 3
Suggesters: 0
Security: 0
Stars: 7
Watchers: 4
Forks: 2
Open Issues: 0
Requires
- php: ~8.2.0 || ~8.3.0
- doctrine/data-fixtures: ^1.7
- doctrine/orm: *
- symfony/console: ^7.0
Requires (Dev)
- laminas/laminas-coding-standard: ^2.5
- phpunit/phpunit: ^10.2
- vimeo/psalm: ^5.13
README
Important
dot-data-fixtures is a wrapper on top of doctrine/data-fixtures
This package provides a CLI interface for interacting with doctrine/data-fixtures.
Executing fixtures will append data to the tables.
Requirements
- PHP >= 8.1
- doctrine/data-fixtures => 1.5
Installation
Run the following command in you project directory
$ composer require dotkernel/dot-data-fixtures
Next, register the package's ConfigProvider into your application config.
\Dot\DataFixtures\ConfigProvider::class,
In doctrine.global.php
(or your custom doctrine config file) add a new key fixtures
, in the doctrine
array, the value should be a valid path to a folder where your fixtures can be found.
Make sure the path is valid before proceeding to the next step.
Example
return [ 'dependencies' => [ ... ], 'doctrine' => [ ..., 'fixtures' => getcwd() . '/data/doctrine/fixtures', ], ];
The last step is to register the commands.
We can register the commands to work with the default CLI that doctrine provides us.
Create a new php file bin/doctrine
(if you don't already have this file feel free to copy it from the below example)
<?php use Doctrine\ORM\Tools\Console\ConsoleRunner; use Doctrine\ORM\Tools\Console\EntityManagerProvider\SingleManagerProvider; require_once 'vendor/autoload.php'; $container = require getcwd() . '/config/container.php' ; $entityManager = $container->get(\Doctrine\ORM\EntityManager::class); $commands = [ $container->get(Dot\DataFixtures\Command\ExecuteFixturesCommand::class), $container->get(Dot\DataFixtures\Command\ListFixturesCommand::class), ]; ConsoleRunner::run( new SingleManagerProvider($entityManager), $commands );
Usage
List fixtures command - will list all the available fixtures, by order of execution.
php bin/doctrine fixtures:list
Execute fixtures command - this command will execute all or one fixture.
- To execute all the fixtures run :
php bin/doctrine fixtures:execute
- To execute a specific fixture run :
php bin/doctrine fixtures:execute --class=RoleLoader
Creating fixtures
When creating a new fixture we have 2 requirements :
- Fixtures should be created in the folder we configured earlier.
data/doctrine/fixtures
- Fixtures should implement
FixtureInterface
and have aload
method. - Create a new php file and copy the below code-block.
Example
<?php namespace Frontend\Fixtures; use Doctrine\Common\DataFixtures\FixtureInterface; use Doctrine\Persistence\ObjectManager; use Frontend\User\Entity\UserRole; class RoleLoader implements FixtureInterface { public function load(ObjectManager $manager): void { $adminRole = new UserRole(); $adminRole->setName('admin'); $userRole = new UserRole(); $userRole->setName('user'); $guestRole = new UserRole(); $guestRole->setName('guest'); $manager->persist($adminRole); $manager->persist($userRole); $manager->persist($guestRole); $manager->flush(); } }
Ordering fixtures
Fixtures can we ordered using 2 methods :
- by order
- by dependencies
Please refer to this link for further details on ordering fixtures: