staudenmeir / eloquent-eager-limit
Laravel Eloquent 预加载限制
v1.8.3
2023-07-12 21:15 UTC
Requires
- php: ^8.1
- illuminate/database: ^10.0
Requires (Dev)
- phpunit/phpunit: ^10.1
README
重要
该包的代码已合并到 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();
包冲突
staudenmeir/laravel-adjacency-list
:将两个包替换为 staudenmeir/eloquent-eager-limit-x-laravel-adjacency-list 以在相同模型上使用它们。staudenmeir/laravel-cte
:将两个包替换为 staudenmeir/eloquent-eager-limit-x-laravel-cte 以在相同模型上使用它们。topclaudy/compoships
:将两个包替换为 mpyw/compoships-eager-limit 以在相同模型上使用它们。
贡献
请参阅 CONTRIBUTING 和 行为准则 以获取详细信息。