我尝试创建一个雄辩的访问者,这取决于几个条件:
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
个新项目的所有项目。
答案 0 :(得分:2)
当您在访问者中执行 a,b,c = append_and_assign(lst, f)
时,您实际上正在检查模型的属性if ($this->new)
或true
,因此在此处使用范围没有任何意义。< / p>
此外,范围是查询的过滤器,访问器是使用一个对象的方法,因此无论如何您都无法执行此类操作。如果要重用某些代码,请使用简单的方法。