Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom Artisan Command to execute multiple commands

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?

like image 812
mrdyan Avatar asked May 18 '20 14:05

mrdyan


People also ask

Which artisan command makes another artisan command?

To call another Artisan command and save its output you should use $this->call() from your command.

How do I run an artisan command in terminal?

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.


2 Answers

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');
}
like image 124
Malkhazi Dartsmelidze Avatar answered Oct 14 '22 13:10

Malkhazi Dartsmelidze


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',
]);
like image 32
Spholt Avatar answered Oct 14 '22 13:10

Spholt