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
方法,最终正在检查范围是否存在然后调用它。
如果您希望能够以流畅的方式应用它,请将您的范围命名为其他名称。
我在 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
方法,最终正在检查范围是否存在然后调用它。
如果您希望能够以流畅的方式应用它,请将您的范围命名为其他名称。