Installation:
composer require czogori/dami-bundle
Ensure DamiBundle is enabled in config/bundles.php:
return [
// ...
Czogori\DamiBundle\DamiBundle::class => ['all' => true],
];
First Use Case:
The bundle appears to be a data migration helper (inferred from the name "Dami" = "Data Migration").
Check the src/Resources/config/services.yaml for default configurations or run:
php bin/console dami:list
(If the command exists—verify via php bin/console list)
Where to Look First:
src/ for core classes (e.g., DamiService, Migration).php bin/console list to check for custom CLI tools (e.g., dami:migrate).config/packages/czogori_dami.yaml (if provided).Data Migration Orchestration:
DamiBundle\Migration\AbstractMigration (if the bundle follows Laravel’s migrator pattern).
namespace App\Dami\Migrations;
use Czogori\DamiBundle\Migration\AbstractMigration;
class UpdateUserEmails extends AbstractMigration {
public function up() {
DB::table('users')->update(['email_verified' => true]);
}
}
DamiEvents::REGISTER_MIGRATION) or a service tag (services.yaml):
services:
app.dami.migrations.update_emails:
class: App\Dami\Migrations\UpdateUserEmails
tags: ['czogori.dami.migration']
CLI Integration:
php bin/console dami:migrate --migration=UpdateUserEmails
php bin/console dami:rollback --migration=UpdateUserEmails
Database-Agnostic Logic:
$this->dami->table('users')->where('active', false)->delete();
DamiEvents::MIGRATION_STARTED/COMPLETED to log or validate migrations.DB::table('orders')->orderBy('id')->chunk(1000, function ($orders) {
foreach ($orders as $order) {
// Process order
}
});
DamiService in PHPUnit:
$this->mock(DamiService::class)->shouldReceive('runMigration')->once();
Lack of Documentation:
src/ for undocumented features.php bin/console debug:container Czogori\DamiBundle to explore services.No Built-in Rollback:
dami:rollback doesn’t exist, implement it manually by storing migration states in a migrations table:
Schema::create('dami_migrations', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamp('executed_at')->nullable();
});
Database Locking:
DB::transaction(function () {
// Migration logic
});
php bin/console dami:migrate --verbose
storage/logs/laravel.log for errors during execution.DB::enableQueryLog();
// Run migration
dd(DB::getQueryLog());
Custom Migration Types:
AbstractMigration to add pre/post hooks:
protected function preUp() { /* Validate data */ }
protected function postDown() { /* Cleanup */ }
Add CLI Commands:
namespace App\Console\Commands;
use Czogori\DamiBundle\Migration\MigrationRepository;
use Illuminate\Console\Command;
class ListPendingMigrations extends Command {
protected $signature = 'dami:pending';
public function handle(MigrationRepository $repository) {
foreach ($repository->getPending() as $migration) {
$this->info($migration->getName());
}
}
}
Configuration Overrides:
dami service in config/services.yaml:
czogori_dami:
default_connection: pgsql
batch_size: 500
executed_at before running).--dry-run flag to simulate migrations without executing:
if ($this->option('dry-run')) {
$this->comment("Would execute: " . $query);
return;
}
RunMigrationJob::dispatch($migrationClass);
How can I help you explore Laravel packages today?