Laravel 模型中的本地作用域不起作用

Local scopes in Laravel Model didn't work

我在 Laravel 的模型中创建了新范围,但它根本不起作用。它似乎对控制器不可见。

模型中的文件 test.php:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    public function scopeLatest(Builder $query, int $limit)
    {
        return $query
        ->select(['id', 'title', 'main_photo', 'area', 'price', 'city', 'short_desc'])
        ->whereIn('status', ['Dostepne', 'Zarezerwowane'])
        ->orderBy('id', 'desc')
        ->limit($limit)
        ;
    }
}

控制器文件:

$flats = Test::latest(3)->get();

最后,我正在恢复数据库中的每条记录。当我删除控制器中的 get 方法时,我没有收到任何记录。无论我在 scopeLatest 中写什么都没关系。

Eloquent 查询生成器中已经存在一个名为 latest 的方法;这是一个 public 方法,所以这就是您直接调用的方法。为了能够应用范围(在 Builder 上调用范围),您必须调用一个不存在或不可访问(不可见)的方法,这将使 PHP 调用 __call 方法,最终正在检查范围是否存在然后调用它。

如果您希望能够以流畅的方式应用它,请将您的范围命名为其他名称。