Why Laravel keeps calling schedule() with every Artisan Command?

Viewed 1835

I have one table called dc_user_meta and I've created one artisan command and scheduled it in kernel.php. Just after cloning the repository, when I try to run PHP artisan migrate, I get this error.

  [Illuminate\Database\QueryException]                                                                                                              
  SQLSTATE[42S02]: Base table or view not found: 1146 Table 'database.dc_user_meta' doesn't exist (SQL: select * from `dc_user_met  
  a` where `meta_key` = usage_in_days)

Not only php artisan migrate but I am unable to run any artisan command at all! I don't know why PHP keeps calling schedule method every time I try to execute any artisan command.

Here in this case, What I can do to solve this error is put the cover over my logic in schedule method just like this.

if(Schema::hasTable('dc_user_meta')){
    // Code here
}

But I don't think it's good in Long run. What's the right way to solve this error?


UPDATE: I just tried covering call to command in kernel.php just like this but still no success!

if(Schema::hasTable('dc_user_meta')){
    $schedule->command('usage:update')->daily();
}

UPDATE: I got the solution. But I don't think it's the answer to the question. It solves my problem but I don't think it's standard Solution. I just covered by Command login just like this.

if(Schema::hasTable('dc_user_meta')){
    // Command Logic
}

Any specific answer to why Laravel calls schedule() with every artisan command and how to solve the error in a standard way if something like this happens!

5 Answers

If anyone still cares about this...

<?php
# This is your app/Console/Kernel.php
use ...;

class Kernel extends ConsoleKernel {

    # Other stuff...

    protected function schedule(Schedule $schedule) {
        if( in_array('schedule:run', $_SERVER['argv']) ){
            # Your scheduler commands here...
        }
    }

}
Related