首页 > 解决方案 > 在构造函数中分配的 Laravel 作业新属性未在句柄方法中显示

问题描述

在 Laravel 作业类中,其代码如下所示。如果满足条件,我想为我的对象分配一个属性(不保留 db 上的列)。问题是我在构造函数之外看不到该属性。请问我做错了什么?

class SomeJob implements ShouldQueue
{   
  private $length;
  private $width;
  private $area;

  public function __construct()
  {
    $areas = Area::where('length', $this->length)->get()->each(function($area) {
     if($area->length === 300) {
       $area->reserve = ($area->length + 400);
     }
   });

   $this->area = $areas;
   // *log has $area->reserve*
  }
  
  public function handle()
  {
   $area = $this->area;

   logger($area);
   // *log does not have $area->reserve*
  }

}

标签: phplaravel

解决方案


您需要在__construct()函数之外定义属性。__construct()目前,这些变量的范围仅限于在闭包中可用。

class SomeJob implements ShouldQueue
{   
     protected $length;
     protected $width;
     protected $area;

     public function __construct()
     {
         //...

推荐阅读