【问题标题】:Laravel Job Property of Non Object非对象的 Laravel Job 属性
【发布时间】:2017-10-06 21:12:48
【问题描述】:

我用一个简单的工作设置了一个 redis 队列。工作代码如下。我不断收到以下错误 -

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

如果我采用相同的代码并将其移至我的控制器,它就可以工作。但是,当我将它移到这里时,它甚至都不会运行。这是我的 ResolveOrders.php - Laravel 似乎无法识别我的 Sync 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();


    }


}

【问题讨论】:

    标签: php laravel eloquent queue jobs


    【解决方案1】:

    关键是队列处理作业时没有 Auth::user() 。您必须将用户 ID 存储在构造函数中。

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

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 1970-01-01
      • 2016-02-12
      • 2017-10-07
      • 1970-01-01
      • 2015-12-23
      • 2018-02-21
      • 2015-09-22
      • 2017-03-20
      相关资源
      最近更新 更多