我试图为我拥有的一个表实现一个"approved"状态,基本上,如果行的approve列等于1,这非常简单;应该检索该行,否则就不应该检索该行.

问题是,现在我必须遍历整个代码库,添加一个WHERE语句(即函数调用),这不仅耗时,而且效率低下(如果我想删除该功能,等等)

我该怎么做?它是否像在Eloquent 的子类构造函数中添加$this->where(..)一样简单?这不会影响其他CRUD操作吗?例如不更新未批准的行?

推荐答案

我找到的最接近的东西是Eloquent query scope.

尽管它需要对我的代码(前缀查询)进行微小的更改,但它仍然以极大的灵活性为我提供了所需的内容.

下面是一个例子:

在Elount子类中创建一个函数:

class Post extends Eloquent {

    public function scopeApproved($query)
    {
        return $query->where('approved', '=', 1/*true*/);
    }

}

然后像这样简单地使用它:

$approvedPosts = Post::approved()-><whatever_queries_you_have_here>;

效果很好.没有函数调用的地方.易于修改.更容易阅读(approved()where('approved', '=', 1)更有意义)

Laravel相关问答推荐

如何更改LIVE上的Filament占位符内容?

在postgres/mysqlс中,我可以定义基于json字段的唯一索引吗?

拉威尔望远镜没有显示请求细节

Laravel Horizo​​n 限制与优化

调用字符串上的成员函数

如何在 laravel 5.3 中验证没有 auth:api 中间件的用户?

Laravel 中间件返回(try 获取非对象的属性 headers)错误

Laravel 将 JSON 转换为数组?

在 Laravel 5 中扩展请求类

如何在 Eloquent 上设置条件关系

在 AWS 上找不到 Laravel 5 类Collective\Html\HtmlServiceProvider

如何利用 StorageFacade 的 Filesystem 类的 glob 方法?

PHP Laravel:如何获取客户端浏览器/设备?

约定表名(带下划线)

Laravel 4 - 如何将所有字段的所有验证错误消息作为 JSON struct 返回?

Laravel 搜索关系

laravel 5.1 在没有 VM 重启的情况下看不到作业(job)文件的更改

Laravel 在保存前生成 slug

Composer RuntimeException - 无法加载软件包 mews/purifier

Laravel 手动登录功能