2017-10-06 6 views
0

J'ai une file d'attente Redis avec un travail simple. Le code de travail est ci-dessous. Je continue d'obtenir l'erreur suivante -Propriété de travail Laravel de Non Objet

ErrorException: Trying to get property of non-object in /app/Jobs/ResolveOrders.php:42 

Si je prends ce même code et que je le déplace vers mon contrôleur, cela fonctionne. Cependant, quand je le déplace ici, il ne fonctionne même pas. Voici mon ResolveOrders.php - il semble que Laravel ne reconnaît pas mon modèle de synchronisation db

<?php 

namespace App\Jobs; 

use Illuminate\Support\Facades\Auth; 
use App\Sync; 
use App\Helpers\getOrdersHelpers; 
use Carbon\Carbon; 
use Illuminate\Bus\Queueable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Illuminate\Foundation\Bus\Dispatchable; 



class ResolveOrders implements ShouldQueue 
{ 
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 

    public $tries = 1; 

    public $timeout = 660; 

    /** 
    * Create a new job instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 

    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     $job = Sync::create(['user_id' => Auth::user()->id, 
        'last_updated_date' => Carbon::now(), 
        'status' => 'running']); 

     $getOrdersHelpers = new getOrdersHelpers(); 
     $return = $getOrdersHelpers->getOrders(1, $job); 
     $pageNum = $return[0]; 
     $totalPages = $return[1]; 

     if ($totalPages > $pageNum) { 
      while ($pageNum <= $totalPages) { 
       $getOrdersHelpers->getOrders($pageNum, $job); 
       $pageNum++; 
      } 
     } 

      $job->status = "complete"; 
     $job->save(); 


    } 


} 

Répondre

1

Le point est qu'il n'y a pas Auth :: utilisateur() lorsque la tâche est assurée par la file d'attente. Vous devez stocker l'ID utilisateur dans le constructeur.

<?php 

namespace App\Jobs; 

use Illuminate\Support\Facades\Auth; 
use App\Sync; 
use App\Helpers\getOrdersHelpers; 
use Carbon\Carbon; 
use Illuminate\Bus\Queueable; 
use Illuminate\Queue\SerializesModels; 
use Illuminate\Queue\InteractsWithQueue; 
use Illuminate\Contracts\Queue\ShouldQueue; 
use Illuminate\Foundation\Bus\Dispatchable; 



class ResolveOrders implements ShouldQueue 
{ 
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; 

    public $tries = 1; 

    public $timeout = 660; 

    protected $user_id; 

    /** 
    * Create a new job instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->user_id = Auth::user()->id; 
    } 

    /** 
    * Execute the job. 
    * 
    * @return void 
    */ 
    public function handle() 
    { 
     $job = Sync::create(['user_id' => $this->user_id, 
        'last_updated_date' => Carbon::now(), 
        'status' => 'running']); 

     $getOrdersHelpers = new getOrdersHelpers(); 
     $return = $getOrdersHelpers->getOrders(1, $job); 
     $pageNum = $return[0]; 
     $totalPages = $return[1]; 

     if ($totalPages > $pageNum) { 
      while ($pageNum <= $totalPages) { 
       $getOrdersHelpers->getOrders($pageNum, $job); 
       $pageNum++; 
      } 
     } 

      $job->status = "complete"; 
     $job->save(); 


    } 


}