laravel模型的scope前缀方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34804120/article/details/86251314

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

猜你喜欢

转载自blog.csdn.net/qq_34804120/article/details/86251314
今日推荐