lastdragon-ru / lara-asp-eloquent
The Awesome Set of Packages for Laravel - Eloquent Helpers.
Installs: 99 798
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
pkg:composer/lastdragon-ru/lara-asp-eloquent
Requires
- php: ^8.3|^8.4
- ext-mbstring: *
- illuminate/collections: ^12.0.1
- illuminate/database: ^12.0.1
- illuminate/support: ^12.0.1
- lastdragon-ru/lara-asp-core: 9.3.1
- symfony/polyfill-php84: ^1.31
Requires (Dev)
- illuminate/contracts: ^12.0.1
- lastdragon-ru/lara-asp-testing: 9.3.1
- mockery/mockery: ^1.6.6
- orchestra/testbench: ^10.0.0
- phpunit/phpunit: ^11.1.0|^12.0.0
- dev-main
- 9.x-dev
- 9.3.1
- 9.3.0
- 9.2.0
- 9.1.0
- 9.0.0
- 8.x-dev
- 8.1.1
- 8.1.0
- 8.0.0
- 7.x-dev
- 7.2.0
- 7.1.0
- 7.0.1
- 7.0.0
- 6.x-dev
- 6.4.2
- 6.4.1
- 6.4.0
- 6.3.0
- 6.2.0
- 6.1.0
- 6.0.0
- 5.x-dev
- 5.6.0
- 5.5.0
- 5.4.0
- 5.3.1
- 5.3.0
- 5.2.0
- 5.1.0
- 5.0.0
- 5.0.0-beta.1
- 5.0.0-beta.0
- 4.x-dev
- 4.6.0
- 4.5.2
- 4.5.1
- 4.5.0
- 4.4.0
- 4.3.0
- 4.2.1
- 4.2.0
- 4.1.0
- 4.0.0
- 3.0.0
- 2.x-dev
- 2.1.0
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.x-dev
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.15.0
- 0.14.1
- 0.14.0
- 0.13.0
- 0.12.0
- 0.11.0
- 0.10.0
- 0.9.0
- 0.8.1
- 0.8.0
- 0.7.0
- 0.6.1
- 0.6.0
- 0.5.0
- 0.4.0
- 0.3.0
- 0.2.0
- 0.1.0
This package is auto-updated.
Last update: 2025-10-13 12:11:08 UTC
README
This package contains useful extensions and mixins for Eloquent.
Requirements
| Requirement | Constraint | Supported by |
|---|---|---|
| PHP | ^8.4 |
HEAD ⋯ 8.0.0 |
^8.3 |
HEAD ⋯ 5.0.0 |
|
^8.2 |
7.2.0 ⋯ 2.0.0 |
|
^8.1 |
6.4.2 ⋯ 2.0.0 |
|
^8.0 |
4.6.0 ⋯ 2.0.0 |
|
^8.0.0 |
1.1.2 ⋯ 0.12.0 |
|
>=8.0.0 |
0.11.0 ⋯ 0.4.0 |
|
>=7.4.0 |
0.3.0 ⋯ 0.1.0 |
|
| Laravel | ^12.0.1 |
HEAD ⋯ 9.0.0 |
^11.0.8 |
8.1.1 ⋯ 8.0.0 |
|
^11.0.0 |
7.2.0 ⋯ 6.2.0 |
|
^10.34.0 |
7.2.0 ⋯ 6.2.0 |
|
^10.0.0 |
6.1.0 ⋯ 2.1.0 |
|
^9.21.0 |
5.6.0 ⋯ 5.0.0-beta.1 |
|
^9.0.0 |
5.0.0-beta.0 ⋯ 0.12.0 |
|
^8.22.1 |
3.0.0 ⋯ 0.2.0 |
|
^8.0 |
0.1.0 |
Installation
composer require lastdragon-ru/lara-asp-eloquent
Iterators
Iterators are similar to Builder::chunk() but uses generators instead of \Closure that makes code more readable:
$query = \App\Models\User::query(); $query->chunk(100, function ($users) { foreach ($users as $user) { // ... } }); foreach ($query->getChunkedIterator() as $user) { // ... }
Iterators also support limit/offset, by default it will try to get them from the Builder, but you can also set them by hand:
$query = \App\Models\User::query()->offset(10)->limit(20); foreach ($query->getChunkedIterator() as $user) { // ... 20 items from 10 } foreach ($query->getChunkedIterator()->setOffset(0) as $user) { // ...20 items from 0 }
When you use the default ChunkedIterator you should not modify/delete the items while iteration or you will get unexpected results (eg missing items). If you need to modify/delete items while iteration you can use ChunkedChangeSafeIterator that specially created for this case and unlike standard chunkById() it is always safe (please see laravel/framework#35400 for more details). But there are few limitations:
- it is not possible to sort rows, they always will be sorted by
column asc; - the
columnshould not be changed while iteration or this may lead to repeating row in results; - the row inserted while iteration may be skipped if it has
columnwith the value that lover than the internal pointer; - queries with UNION is not supported;
offsetfrom Builder will not be used;
To create a change safe instance you can use:
$query = \App\Models\User::query(); foreach ($query->getChangeSafeIterator() as $user) { // ... }
Mixins
\Illuminate\Database\Eloquent\Builder
| Name | Description |
|---|---|
orderByKey(string $direction = 'asc') |
Add an ORDER BY primary_key clause to the query. |
orderByKeyDesc() |
Alias of orderByKey('desc') |
getChunkedIterator() |
Return ChunkedIterator instance. |
getChangeSafeIteratorIterator() |
Return ChunkedChangeSafeIterator instance. |
Upgrading
Please follow Upgrade Guide.
Contributing
This package is the part of Awesome Set of Packages for Laravel. Please use the main repository to report issues, send pull requests, or ask questions.