Weave Code
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

Services Laravel Package

dataplay/services

Dataplay Services provides lightweight tools for Laravel apps: generate mock data from a schema, hash and compare payloads for data sync/integrity checks, and log executed SQL queries to a file for debugging and analysis with zero dependencies.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require zentricdev/dataplay-services
    

    Add the service provider to config/app.php:

    'providers' => [
        // ...
        ZentricDev\DataPlay\DataPlayServiceProvider::class,
    ],
    
  2. First Use Case Inject the DataPlay facade into a controller or service:

    use ZentricDev\DataPlay\Facades\DataPlay;
    
    public function index()
    {
        $data = DataPlay::generate(['type' => 'users', 'count' => 5]);
        return response()->json($data);
    }
    
  3. Key Entry Points

    • DataPlay::generate() – Core method for generating mock data.
    • DataPlay::config() – Modify default configurations.
    • DataPlay::register() – Add custom data generators.

    Check the README for built-in data types (e.g., users, posts, products).


Implementation Patterns

Workflow: Generating Mock Data

  1. Basic Usage

    // Generate 3 fake users
    $users = DataPlay::generate(['type' => 'users', 'count' => 3]);
    
  2. Custom Fields

    $customData = DataPlay::generate([
        'type' => 'custom',
        'fields' => [
            'id' => ['type' => 'incrementing'],
            'name' => ['type' => 'name'],
            'email' => ['type' => 'email'],
            'active' => ['type' => 'boolean'],
        ],
        'count' => 10,
    ]);
    
  3. Integration with Testing

    // In a test case
    public function test_user_creation()
    {
        $fakeUsers = DataPlay::generate(['type' => 'users', 'count' => 2]);
        // Assert or seed database with $fakeUsers
    }
    
  4. Dynamic Data in Controllers

    public function show(Request $request)
    {
        $mockData = DataPlay::generate([
            'type' => 'posts',
            'count' => 1,
            'with' => ['author' => ['type' => 'users']],
        ]);
        return view('mock-post', compact('mockData'));
    }
    
  5. Seeding Databases

    // In a DatabaseSeeder
    $fakeUsers = DataPlay::generate(['type' => 'users', 'count' => 100]);
    User::insert($fakeUsers);
    

Integration Tips

  • Laravel Eloquent: Use DataPlay to generate seed data for factories or migrations.
    // In a Factory
    User::newFactory()->state([
        'name' => DataPlay::generate(['type' => 'name']),
        'email' => DataPlay::generate(['type' => 'email']),
    ]);
    
  • API Mocking: Return fake responses in API tests or stubs.
    $fakeResponse = DataPlay::generate(['type' => 'api_responses', 'endpoint' => 'users']);
    
  • Configuration Overrides: Modify defaults via DataPlay::config().
    DataPlay::config(['default_count' => 10]);
    

Gotchas and Tips

Pitfalls

  1. Undefined Types

    • Error: DataPlay::generate(['type' => 'invalid_type']) throws InvalidDataTypeException.
    • Fix: Check supported types or register a custom type.
  2. Nested Data Overhead

    • Generating deeply nested data (e.g., posts with comments and authors) can slow down execution.
    • Fix: Limit depth or use lazy loading.
  3. Database Conflicts

    • Inserting fake data with duplicate keys (e.g., emails) may fail.
    • Fix: Use UUIDs or append random suffixes:
      $fakeUsers = DataPlay::generate(['type' => 'users', 'count' => 5]);
      array_walk($fakeUsers, fn(&$user) => $user['email'] .= '-' . Str::random(4));
      
  4. State Persistence

    • DataPlay does not persist state between calls (e.g., auto-incrementing IDs reset).
    • Fix: Use a database sequence or track IDs manually.

Debugging

  • Inspect Generated Data
    $data = DataPlay::generate(['type' => 'users', 'debug' => true]);
    // Returns array with metadata (e.g., seed used)
    
  • Log Custom Generators Add debug logs in custom types:
    DataPlay::register('custom_type', function() {
        \Log::debug('Generating custom_type...');
        return ['key' => Str::random(10)];
    });
    

Extension Points

  1. Custom Data Types
    DataPlay::register('products', function() {
        return [
            'name' => fake()->word(),
            'price' => fake()->randomFloat(2, 10, 1000),
            'sku' => 'SKU-' . Str::upper(Str::random(8)),
        ];
    });
    
  2. Override Default Fields
    DataPlay::config([
        'types.users.fields.email' => ['type' => 'email', 'domain' => 'example.com'],
    ]);
    
  3. Hooks for Post-Generation
    DataPlay::afterGenerate(function($data) {
        if (isset($data[0]['created_at'])) {
            $data[0]['created_at'] = now()->subDays(rand(1, 30));
        }
        return $data;
    });
    

Performance Tips

  • Batch Processing: Generate large datasets in chunks to avoid memory issues.
    $chunkSize = 1000;
    for ($i = 0; $i < 10000; $i += $chunkSize) {
        $chunk = DataPlay::generate(['type' => 'users', 'count' => $chunkSize]);
        User::insert($chunk);
    }
    
  • Cache Generators: Cache frequently used generators if they’re stateless.
    $cachedGenerator = Cache::remember('fake_users', now()->addHours(1), function() {
        return DataPlay::generate(['type' => 'users', 'count' => 100]);
    });
    
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.
croct/coding-standard
croct/plug-php
nqxcode/phpmorphy
boundwize/pyrameter
testo/facade
develia/commons
dmstr/symfony-system-resources-bundle
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
renatomarinho/laravel-page-speed
develia/geo-bundle
austinheap/laravel-database-encryption
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
imbo/imbo-coding-standard
visualbuilder/filament-lottie
servicioslineaonce/starter-kit
atomcoder/laravel-reorderable
irajul/filament-shadcn-theme