staudenmeir/eloquent-eager-limit

Laravel Eloquent 预加载限制

v1.8.3 2023-07-12 21:15 UTC

README

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

重要

该包的代码已合并到 Laravel 11+,预加载限制现在原生支持。

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

支持 Laravel 5.5–10。

兼容性

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

安装

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

如果您在 Windows 的 PowerShell 中(例如在 VS Code 中),请使用此命令

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();

包冲突

贡献

请参阅 CONTRIBUTING行为准则 以获取详细信息。