Laravel Eloquent 中可以通过静态方式调用的方法
发布时间:2025-08-18 13:32
在 Laravel Eloquent 中,可以通过静态方式调用的方法包括:
1. 查询作用域 (Scopes)
// 可以静态调用
UserComment::active()->get();
UserComment::where('status', 1)->first();
2. 查询构建器 (Query Builder) 的所有方法
Laravel 通过魔术方法 __callStatic 将模型的静态调用转发到一个新的查询构建器实例上。因此,所有 Illuminate\Database\Eloquent\Builder 类的方法都可以静态调用。常见示例:
where(), orWhere()
orderBy(), latest(), oldest()
with(), withCount()
select(), join()
find(), first(), get(), paginate()
count(), sum(), avg()
3. Eloquent 模型内置的静态方法
all()
create()
find()
findOrFail()
updateOrCreate()
destroy()
不能通过静态方式调用的:
自定义的普通 public 方法 ❌
// 这样会报错
class UserComment extends Model
{
public function getStatusText()
{
return $this->status == 1 ? '活跃' : '禁用';
}
}
// UserComment::getStatusText(); // 错误!
正确的调用方式:
// 需要先获取模型实例
$comment = UserComment::find(1);
$comment->getStatusText(); // 正确
// 或者在集合上使用
$comments = UserComment::all();
$comments->each->getStatusText(); // 正确
总结:只有查询相关的方法(作用域、查询构建器方法)才能通过静态方式调用,实例方法必须通过模型实例来调用。
一句话来说就是laravel Eloquent自带的方法或者通过他提供的特殊方式(scope)创建的方法,可以静态方式调用, 其他自定义的都不行
上一篇:laravel推荐把业务逻辑写在控制器中还是放在服务类中? 下一篇:返回列表