rbur0425
rbur0425

Reputation: 479

Laravel Job Property of Non Object

I have a redis queue set up with a simple job. The job code is below. I keep getting the following error -

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

If I take this same code and move it to my controller it works. However, when I move it here it does not even run. Here is my ResolveOrders.php - it seems like Laravel is not recognizing my Sync db model

<?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();


    }


}

Upvotes: 0

Views: 663

Answers (1)

Webdesigner
Webdesigner

Reputation: 1982

The Point is that there is no Auth::user() when the Job is handled by the queue. You have to store the user id in the constructor.

<?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();


    }


}

Upvotes: 1

Related Questions