You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9中Book模型的Eloquent查询逻辑应放置于何处?

问题解答

代码应该放在哪里?

必须放在Book模型里。这种和模型业务强相关的重复查询,就该封装在模型内部,遵循「胖模型、瘦控制器」的Eloquent设计原则。把查询逻辑集中在模型里,既能避免控制器代码臃肿,也方便后续修改(比如哪天要把"当年"改成"近12个月"),只需要改模型里的代码,不用挨个找所有调用的地方。

另外要提一句:你写的原始where语法有问题,正确的写法应该用whereYear来精准匹配年份,我会在封装方法里给你修正。

怎么封装和调用?

1. 在Book模型里定义静态方法

把查询逻辑封装成模型的静态方法,因为我们是获取一批书籍集合,不需要先实例化单个Book对象:

class Book extends Model
{
    // 其他模型代码...

    public static function getPublished()
    {
        return self::where('published', true)
            ->whereYear('publish_date', date('Y'))
            ->get();
    }
}

2. 调用方式

在控制器或者其他业务代码里,直接通过模型类调用静态方法:

// 正确调用方式
$books = Book::getPublished();

而Book->getPublished()是实例化对象后的调用方式,这里完全不需要——我们不是要操作某一本具体的书,而是要获取符合条件的书籍列表,所以用静态调用::才是正确的。

内容的提问来源于stack exchange,提问作者bart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:35:22