Today we'll talk about how to use one of Laravel's lesser-known features to quickly read data from our Laravel applications. We can use Laravel artisan's built-in
php artisan tinker to mess around with your application and things in the database.
Laravel artisan's tinker is a repl (read-eval-print loop). A repl translates to
read-eval-print-loop, and it is an interactive language shell. It takes in a single user input, evaluates it, and returns the result to the user.
A quick and easy way to see the data in your database.
Wouldn't it be nice to see the immediate output of commands like:
// see the count of all users App\User::count(); // find a specific user and see their attributes App\User::where('username', 'samuel')->first(); // find the relationships of a user $user = App\User::with('posts')->first(); $user->posts;
php artisan tinker, we can do the above pretty quickly. Tinker is Laravel's own repl, based on PsySH. It allows us to interact with our applications and stop
die()ing all the time. A lot of us know the insanity that ensues when there are
dd()s all over our code.
Before we tinker with our application, let us create a demo project. Let's call it ScotchTest. If you have the laravel installer installed on your computer, run this command.
laravel new ScotchTest
For those without the Laravel installer on their computer, you can still use
composer to create a new Laravel project.
composer create-project laravel/laravel ScotchTest --prefer-dist
After installing our demo Laravel project, we need to create a database and setup migrations. For this article we will be using the default Laravel migrations. So we configure our
.env file to point to the database you created for this test. The default migrations include creating a
users table and a
From the root of the project, run
php artisan migrate
After migrating our database, we should see something similar to
By default, Laravel provides a model factory that we can use to seed our database. Now lets begin to tinker with our application.
From the root of the Laravel project, run the following command.
php artisan tinker
This command opens a
repl for interacting with your Laravel application. First let's migrate our database. While in the
repl, we can run our model factory and seed our database.
A collection of ten new users should show up on your terminal. We can then check the database to see if the users were actually created.
To get the total number of users in our database, we can just call
count on the
App\User::count(), mine looks like this. You should get something similar to mine only difference being the data generated.
From the repl, we can create a new user. You should note that we interact with this
repl just like you would write code in your laravel application. So to create a new user, we would do
$user = new App\User; $user->name = "Wruce Bayne"; $user->email = "firstname.lastname@example.org"; $user->save();
Now we can type
$user to the
repl and get something like this.
To delete a user, we can just do
$user = App\User::find(1); $user->delete();
With tinker, you can checkout a class or function documentation right from the
repl. But it depends on the class or function having
doc <functionName> # replace <functionName> with function name or class FQN
dd gives us this.
We can also check out a function or class source code while in the
For example, calling
dd give us this.
Laravel Tinker is a tool that can help us easily interact with our application without having to spin up a local server. Think of a simple feature you want to test in a couple of lines you'd delete from your project, use tinker instead.