Laravel雄辩地在访问者

时间:2018-01-24 19:28:37

标签: laravel eloquent

我尝试创建一个雄辩的访问者,这取决于几个条件:

public function getStatusTypeAttribute()
{
  if($this->new) {
    return 'NEW';
  }

  if( ! $this->new && $this->active && $this->customer_choose) {
    return 'PLANNED';
  }

  if( ! $this->new && $this->active && ! $this->sent_to_customer) {
    return 'ACCEPTED';
  }

  return 'OLD';
}

我还有一些条件,我也想分开访问(假设我只想要新项目。所以我尝试添加范围方法,如:

public function scopeNew($query)
{
  return $query->where('new', true);
}

现在我可以通过$model->new()->get()访问它们了,但我无法让它适用于访问者:

public function getStatusTypeAttribute()
{
  if($this->new()) {
    return 'NEW';
  }

  ...
}

不行。即使status_type属性位于new,他也会向我提供false个新项目的所有项目。

1 个答案:

答案 0 :(得分:2)

当您在访问者中执行 a,b,c = append_and_assign(lst, f) 时,您实际上正在检查模型的属性if ($this->new)true,因此在此处使用范围没有任何意义。< / p>

此外,范围是查询的过滤器,访问器是使用一个对象的方法,因此无论如何您都无法执行此类操作。如果要重用某些代码,请使用简单的方法。