laravel/tinker
Laravel Tinker is a powerful REPL for Laravel, letting you interact with your application from the command line. Run Artisan’s tinker command to test code, inspect models, and debug quickly in an interactive shell.
Installation:
composer require laravel/tinker
Tinker is included by default in Laravel since version 5.5, so no additional installation is required in most cases.
Accessing Tinker: Launch Tinker via Artisan:
php artisan tinker
Or directly from any Artisan command:
php artisan tinker --execute="User::first()"
First Use Case: Debug a model query or test logic interactively:
>>> $user = User::find(1);
=> App\Models\User {#3245
id: 1,
name: "John Doe",
email: "john@example.com",
}
>>> $user->posts()->count();
=> 5
Debugging Queries: Use Tinker to inspect Eloquent queries without writing test cases:
>>> $query = User::where('active', true)->toSql();
=> "select * from `users` where `active` = ?"
>>> $query
=> Illuminate\Database\Query\Builder {#3245 ...}
Testing Logic: Validate business logic before committing:
>>> $order = new Order(['total' => 100]);
>>> $order->applyDiscount(20);
=> 80
Interactive Console Commands: Execute commands programmatically:
>>> Artisan::call('migrate:status');
=> "Migration status output..."
Custom Casting: Extend Tinker’s output formatting for custom objects:
// In AppServiceProvider@boot()
Psy\Configuration::getOption('casting')->addCaster(MyModel::class, function ($model) {
return "Custom: {$model->id}";
});
Cache, Mail) are available.--env=testing to test logic in a specific environment:
php artisan tinker --env=testing
--execute:
php artisan tinker --execute="User::all()->count()"
Environment Mismatch:
Tinker runs in the same environment as the Artisan command. Ensure .env variables are loaded correctly:
php artisan tinker --env=production # Use cautiously!
PsySH Prompts:
Avoid accidental trust prompts by using --no-interaction:
php artisan tinker --no-interaction
Memory Leaks: Complex queries or loops in Tinker can consume memory. Reset the session with:
>>> Psy\Configuration::getOption('history')->clear();
Inspect Variables:
Use var_dump() or dd() (via dump() helper) for deep inspection:
>>> dump($user->toArray());
Autocomplete:
Press Tab to autocomplete classes, methods, or properties (PsySH feature).
Exit Gracefully:
Use exit or Ctrl+D to quit Tinker without errors.
Custom Casters: Override default output for models or collections:
Psy\Configuration::getOption('casting')->addCaster(Collection::class, function ($collection) {
return "Collection[{$collection->count()}]";
});
PsySH Configuration:
Modify Tinker’s behavior via config/tinker.php (if present) or directly in AppServiceProvider:
Psy\Configuration::getOption('history')->setFile('/dev/null'); // Disable history
Whitelisted Commands:
Restrict Tinker to safe commands by extending TinkerCommand:
protected function getWhitelistedCommands()
{
return ['migrate:status', 'cache:clear'];
}
alias tinker='php artisan tinker'
Ctrl+Shift+T) for seamless debugging.>>> $mock = Mockery::mock('alias:Mailer');
>>> $mock->shouldReceive('send')->once();
How can I help you explore Laravel packages today?