2017-10-16 18 views
0

j'ai fait une tâche cron qui exécute tous les jours à 00:00 , il exécute une commande que je fis dans Laravel check:date.Laravel cronjob ne pas exécuter correctement sur le serveur

checkdate

<?php 

namespace App\Console\Commands; 

use Illuminate\Console\Command; 
use App\Programmefunding; 
use Carbon\Carbon; 
class checkDate extends Command{ 

protected $signature = 'check:date'; 

protected $description = 'Check if date is valid'; 


public function __construct() 
{ 
    parent::__construct(); 
} 

/** 
* Execute the console command. 
* 
* @return mixed 
*/ 
public function handle() 
{ 
    Programmefunding::where('date_end', '<', Carbon::now()) 
    ->where('status', 'open') 
    ->update(['status' => 'closed']); 
} 
} 

La commande exécute une requête qui vérifie les financements du programme qui ont le statut « ouvert », vérifie leur date et procède ensuite à changer leur statut « fermé » si le « DATE_END La valeur est inférieure à la date d'aujourd'hui.

Lorsque la tâche cron exécute je reçois cette erreur:

[ErrorException] 


Invalid argument supplied for foreach() 

Est-ce que quelqu'un sait une solution? Ceci est ma commande sur le serveur:

php /home/user/public_html/artisan check:date 

EDIT

modèle Programmefunding

<?php 
namespace App; 

use Illuminate\Database\Eloquent\Model; 
use Carbon\Carbon; 
use Illuminate\Database\Eloquent\SoftDeletes; 


class Programmefunding extends Model 
{ 
    use SoftDeletes; 

    protected $fillable = ['status', 'name', 'description', 'permalink', 'date_start', 'date_end', 'why_end']; 


    public static $enum_status = ["draft" => "Draft", "open" => "Opened", "closed" => "Closed", "announced" => "Announced", "deferred" => "Deferred"]; 



    /** 
    * Set attribute to date format 
    * @param $input 
    */ 
    public function setDateStartAttribute($input) 
    { 
     if ($input != null && $input != '') { 
      $this->attributes['date_start'] = Carbon::createFromFormat(config('app.date_format') . ' H:i:s', $input)->format('Y-m-d H:i:s'); 
     } else { 
      $this->attributes['date_start'] = null; 
     } 
    } 

    /** 
    * Get attribute from date format 
    * @param $input 
    * 
    * @return string 
    */ 
    public function getDateStartAttribute($input) 
    { 
     $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i:s'); 

     if ($input != $zeroDate && $input != null) { 
      return Carbon::createFromFormat('Y-m-d H:i:s', $input)->format(config('app.date_format') . ' H:i:s'); 
     } else { 
      return ''; 
     } 
    } 



    /** 
    * Set attribute to date format 
    * @param $input 
    */ 
    public function setDateEndAttribute($input) 
    { 
     if ($input != null && $input != '') { 
      $this->attributes['date_end'] = Carbon::createFromFormat(config('app.date_format') . ' H:i:s', $input)->format('Y-m-d H:i:s'); 
     } else { 
      $this->attributes['date_end'] = null; 
     } 
    } 

    /** 
    * Get attribute from date format 
    * @param $input 
    * 
    * @return string 
    */ 
    public function getDateEndAttribute($input) 
    { 
     $zeroDate = str_replace(['Y', 'm', 'd'], ['0000', '00', '00'], config('app.date_format') . ' H:i:s'); 

     if ($input != $zeroDate && $input != null) { 
      return Carbon::createFromFormat('Y-m-d H:i:s', $input)->format(config('app.date_format') . ' H:i:s'); 
     } else { 
      return ''; 
     } 
    } 

} 
+1

Pouvez-vous nous montrer le modèle 'Programmefunding'? – ventaquil

+0

Il a été ajouté :) Il est à noter que 'php artisan check: date' fonctionne lorsqu'il est exécuté localement via cmd. – Jawee

+0

le nom de la table sur DB est correct? n'imprime pas la ligne d'erreur? – LorenzoBerti

Répondre

0

J'ai trouvé la réponse après beaucoup de creuser.

php -d register_argc_argv=On /home/user/public_html/artisan check:date 

Source.

Merci à tous pour l'aide. :)