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)创建的方法,可以静态方式调用, 其他自定义的都不行