我有一个具有数百万行的数据库。我只想随时返回最多500个字。我知道我可以在使用Eloquent时在查询中使用-> take(500)来做到这一点。但是,如果我忘记添加此怎么办?
这可能会导致数据库长时间运行查询,从而导致前端应用程序用户的性能出现问题。
我希望有一种方法可以向模型中添加选项,以便每当使用该选项运行查询时,都会自动限制返回500行。
我希望有一种类似于protected $table = 'something';
的东西可以用来附加到所有口才查询。
答案 0 :(得分:2)
您可以对其应用global scope。
例如,您将创建一个LimitScope
,如下所示:
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class LimitScope implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
$builder->take(500);
}
}
,然后将其应用于模型。
<?php
namespace App;
use App\Scopes\LimitScope;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
static::addGlobalScope(new LimitScope);
}
}