!有一个叫做ModelScrops
的特征,我有一些与模型相关联的常用方法。我最近了解了scope
功能。所以,我正在尝试实现它,但我收到此错误:
Call to undefined method IlluminateDatabaseQueryBuilder::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 AppTraitsModelScrops;
...
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
总是返回一个集合。