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.
Installation
composer require zentricdev/dataplay-services
Add the service provider to config/app.php:
'providers' => [
// ...
ZentricDev\DataPlay\DataPlayServiceProvider::class,
],
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);
}
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).
Basic Usage
// Generate 3 fake users
$users = DataPlay::generate(['type' => 'users', 'count' => 3]);
Custom Fields
$customData = DataPlay::generate([
'type' => 'custom',
'fields' => [
'id' => ['type' => 'incrementing'],
'name' => ['type' => 'name'],
'email' => ['type' => 'email'],
'active' => ['type' => 'boolean'],
],
'count' => 10,
]);
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
}
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'));
}
Seeding Databases
// In a DatabaseSeeder
$fakeUsers = DataPlay::generate(['type' => 'users', 'count' => 100]);
User::insert($fakeUsers);
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']),
]);
$fakeResponse = DataPlay::generate(['type' => 'api_responses', 'endpoint' => 'users']);
DataPlay::config().
DataPlay::config(['default_count' => 10]);
Undefined Types
DataPlay::generate(['type' => 'invalid_type']) throws InvalidDataTypeException.Nested Data Overhead
posts with comments and authors) can slow down execution.Database Conflicts
$fakeUsers = DataPlay::generate(['type' => 'users', 'count' => 5]);
array_walk($fakeUsers, fn(&$user) => $user['email'] .= '-' . Str::random(4));
State Persistence
DataPlay does not persist state between calls (e.g., auto-incrementing IDs reset).$data = DataPlay::generate(['type' => 'users', 'debug' => true]);
// Returns array with metadata (e.g., seed used)
DataPlay::register('custom_type', function() {
\Log::debug('Generating custom_type...');
return ['key' => Str::random(10)];
});
DataPlay::register('products', function() {
return [
'name' => fake()->word(),
'price' => fake()->randomFloat(2, 10, 1000),
'sku' => 'SKU-' . Str::upper(Str::random(8)),
];
});
DataPlay::config([
'types.users.fields.email' => ['type' => 'email', 'domain' => 'example.com'],
]);
DataPlay::afterGenerate(function($data) {
if (isset($data[0]['created_at'])) {
$data[0]['created_at'] = now()->subDays(rand(1, 30));
}
return $data;
});
$chunkSize = 1000;
for ($i = 0; $i < 10000; $i += $chunkSize) {
$chunk = DataPlay::generate(['type' => 'users', 'count' => $chunkSize]);
User::insert($chunk);
}
$cachedGenerator = Cache::remember('fake_users', now()->addHours(1), function() {
return DataPlay::generate(['type' => 'users', 'count' => 100]);
});
How can I help you explore Laravel packages today?