andreisizyi/eloquent-eager-limit

Laravel Eloquent 预加载限制

dev-master 2021-10-15 17:38 UTC

This package is not auto-updated.

Last update: 2024-09-29 07:01:17 UTC


README

CI Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads License

简介

此 Laravel Eloquent 扩展允许使用 窗口函数 限制每个父级预加载的结果数量。

支持 Laravel 5.5.29+。

兼容性

  • MySQL 5.7+
  • MySQL 5.5~5.6:由于 MySQL 的一个错误,该包仅在严格模式关闭时才工作。
    在你的 config/database.php 文件中,将 MySQL 连接的 'strict' => false, 设置为。
  • MariaDB 10.2+:由于 MariaDB 中的 错误,该包仅在严格模式关闭时才工作。
    在你的 config/database.php 文件中,将 MariaDB 连接的 'strict' => false, 设置为。
  • PostgreSQL 9.3+
  • SQLite 3.25+:在 SQLite 的较旧版本中忽略限制。这样,你的应用程序测试仍然可以正常工作。
  • SQL Server 2008+

安装

composer require staudenmeir/eloquent-eager-limit:"^1.0"

使用

在父级和关联模型中同时使用 HasEagerLimit 特性,并将 limit()/take() 应用到你的关系上

class User extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

class Post extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

$users = User::with(['posts' => function ($query) {
    $query->latest()->limit(10);
}])->get();

通过应用 limit(1) 改善 HasOne/HasOneThrough/MorphOne 关系的性能

class User extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

    public function latestPost()
    {
        return $this->hasOne('App\Post')->latest()->limit(1);
    }
}

class Post extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

$users = User::with('latestPost')->get();

你还可以将 offset()/skip() 应用到你的关系上

class User extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

    public function posts()
    {
        return $this->hasMany('App\Post');
    }
}

class Post extends Model
{
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

$users = User::with(['posts' => function ($query) {
    $query->latest()->offset(5)->limit(10);
}])->get();

贡献

请参阅 CONTRIBUTINGCODE OF CONDUCT 获取详细信息。