andreisizyi / eloquent-eager-limit
Laravel Eloquent 预加载限制
dev-master
2021-10-15 17:38 UTC
Requires
- php: ^7.3|^8.0
- illuminate/database: ^8.0
Requires (Dev)
- phpunit/phpunit: ^9.3
This package is not auto-updated.
Last update: 2024-09-29 07:01:17 UTC
README
简介
此 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();
贡献
请参阅 CONTRIBUTING 和 CODE OF CONDUCT 获取详细信息。