Laravel: 具有特征的范围方法
Laravel: scope method with traits
!有一个名为 ModelScrops
的特征,其中我有一些与模型相关联的常用方法。我最近了解了 scope
功能。所以,我正在尝试实施它,但出现此错误:
Call to undefined method Illuminate\Database\Query\Builder::addedBy()
这是我的代码:
...
trait ModelScrops
{
...
public function scopeAddedBy($query)
{
return $query->select([
\DB::raw("(
CASE `{$this->table}`.`employable_type`
WHEN 'C' THEN `companies`.`name`
ELSE CONCAT(`employees`.`name`, ' [ ', `employees`.`code`, ' ]')
END
) AS `added_by`")
]);
}
...
}
型号:
use App\Traits\ModelScrops;
...
class Device extends Model
{
use ModelScrops;
...
public function show($token)
{
return \DB::table($this->table)
->where("{$this->table}.token", $token)
...
->addedBy()
->get() ?? null;
}
}
我什至尝试将 scopeAddedBy
方法放入 Device
模型中,但错误是相同的。
范围用于 Eloquent 模型而不是直接与查询生成器一起使用。您正在直接使用查询生成器进行查询:DB::table(...)
。您想使用您的模型构建此查询,您将有权访问您的范围。
return static::where('token', $token)
...
->addedBy()
->get();
甚至:
return $this->newQuery()->where(...)->.....;
旁注:get
总是returns一个集合。
!有一个名为 ModelScrops
的特征,其中我有一些与模型相关联的常用方法。我最近了解了 scope
功能。所以,我正在尝试实施它,但出现此错误:
Call to undefined method Illuminate\Database\Query\Builder::addedBy()
这是我的代码:
...
trait ModelScrops
{
...
public function scopeAddedBy($query)
{
return $query->select([
\DB::raw("(
CASE `{$this->table}`.`employable_type`
WHEN 'C' THEN `companies`.`name`
ELSE CONCAT(`employees`.`name`, ' [ ', `employees`.`code`, ' ]')
END
) AS `added_by`")
]);
}
...
}
型号:
use App\Traits\ModelScrops;
...
class Device extends Model
{
use ModelScrops;
...
public function show($token)
{
return \DB::table($this->table)
->where("{$this->table}.token", $token)
...
->addedBy()
->get() ?? null;
}
}
我什至尝试将 scopeAddedBy
方法放入 Device
模型中,但错误是相同的。
范围用于 Eloquent 模型而不是直接与查询生成器一起使用。您正在直接使用查询生成器进行查询:DB::table(...)
。您想使用您的模型构建此查询,您将有权访问您的范围。
return static::where('token', $token)
...
->addedBy()
->get();
甚至:
return $this->newQuery()->where(...)->.....;
旁注:get
总是returns一个集合。