Is there a way to execute some artisan commands, using custom artisan command, like I want to make a custom command called:
$ php artisan project:init
which will execute some commands like php artisan migrate:refresh
and php artisan db:seed
and php artisan config:clear
Is there any way to do this?
To call another Artisan command and save its output you should use $this->call() from your command.
To create a new artisan command, we can use the make:command artisan command. This command will make a new command class within the app/Console/Commands catalog. In case the directory does not exist in our laravel project, it'll be automatically made the primary time we run the artisan make:command command.
There is 2 way to group commands or call it from another command.
Variant 1:
Create new Console Command in routes/console.php
.
routes/console.php
Artisan::command('project:init', function () {
Artisan::call('migrate:refresh', []); // optional arguments
Artisan::call('db:seed');
Artisan::call('config:clear');
})->describe('Running commands');
Variant 2: According to docs: https://laravel.com/docs/7.x/artisan#calling-commands-from-other-commands
Create new command using command line:
$ php artisan make:command ProjectInit --command project:init
This will create new file: App\Console\Commands\ProjectInit
In that ProjectInit
class's handle
method you can call another commands:
public function handle(){
$this->call('migrate:refresh', []); // optional arguments
$this->call('db:seed');
$this->call('config:clear');
}
Yes, you can call console commands programmatically
https://laravel.com/docs/7.x/artisan#programmatically-executing-commands https://laravel.com/docs/7.x/artisan#calling-commands-from-other-commands
I've used it on a number of occasions where i've wanted to bundle commands together. For example:
$this->call('custom:command1', [
'--argument1' => 'foo',
]);
$this->call('custom:command2', [
'--argument1' => 'bar',
]);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With