laravel模型的scope前缀方法

本文介绍了 Laravel 模型中定义 `scope` 开头的方法,这类方法称为查询作用域,用于简化常见查询。通过在模型上定义带有 `scope` 前缀的方法,可以直接在模型上调用,无需在调用时包含前缀。示例包括无参数和带参数的 scope 方法定义,所有 scope 方法必须以 `scope` 开头,返回类型为 `Builder`,并且第一个参数应为 `Builder` 类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Laravel中模型中可以定义scope开头方法,这类方法可以通过模型直接调用。
这类方法也称作查询作用域

参考文档:https://laravel-china.org/docs/laravel/5.6/eloquent

例如, 你可能经常需要获取「受欢迎的」用户。要定义这样一个范围,只需要在对应的 Eloquent 模型方法前加入 scope 前缀。scope方法总是返回一个查询构造器实例。

1.定义scope方法

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * 只查询受欢迎的用户.
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopePopular($query)
    {
        return $query->where('votes', '>', 100);
    }

    /**
     * 只查询 active 的用户.
     *
     * @param \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeActive($query)
    {
        return $query->where('active', 1);
    }
}

2.调用scope方法:
在方法调用时你不需要添加 scope 前缀

$users = App\User::popular()->active()->orderBy('created_at')->get();

有时,你可能希望定义一个可接受参数的范围。
这时只需给你的范围添加额外的参数即可。
范围参数应该定义在 $query 参数后。

    public function scopeOfType($query, $type)
    {
        return $query->where('type', $type);
    }

注意事项:

  1. 方法定义必须以scope开头。后面第一个字母大写。 后面括号中第一个必须是Builder,第二个参数可以根据需要定义。
  2. 方法返回值也必须是Builder
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值