smartleads / eloquent-eager-limit
Laravel Eloquent 预加载限制
dev-master
2024-09-03 13:38 UTC
Requires
- php: ^8.2
- illuminate/database: ^11.0
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^11.0
This package is not auto-updated.
Last update: 2024-09-18 09:46:27 UTC
README
Eloquent Eager Limit
[!重要] 该包的代码已合并到 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"
版本
Laravel | 包 |
---|---|
10.x | 1.8 |
9.x | 1.7 |
8.x | 1.6 |
7.x | 1.5 |
6.x | 1.4 |
5.8 | 1.3 |
5.5–5.7 | 1.2 |
用法
在父模型和相关模型中同时使用 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 和 CODE OF CONDUCT。