LaravelPackages.net
Acme Inc.
Toggle sidebar
lastdragon-ru/lara-asp-eloquent

Contains useful extensions and mixins for Eloquent.

125.794
1
11.1.1
About lastdragon-ru/lara-asp-eloquent

lastdragon-ru/lara-asp-eloquent is a Laravel package for contains useful extensions and mixins for eloquent.. It currently has 1 GitHub stars and 125.794 downloads on Packagist (latest version 11.1.1). Install it with composer require lastdragon-ru/lara-asp-eloquent. Discover more Laravel packages by lastdragon-ru or browse all Laravel packages to compare alternatives.

Last updated

(Laravel) Eloquent Helpers

This package contains useful extensions and mixins for Eloquent.

Requirements

| Requirement | Constraint | Supported by | |--------------|---------------------|------------------| | PHP | ^8.5 | HEAD ⋯ 11.0.0 | | | ^8.4 | HEAD ⋯ 8.0.0 | | | ^8.3 | 10.3.0 ⋯ 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 | ^13.10.0 | HEAD ⋯ 11.1.0 | | | ^13.0.0 | 11.0.0 | | | ^12.0.1 | 10.3.0 ⋯ 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 https://github.com/laravel/framework/issues/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 column should 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 column with the value that lover than the internal pointer;
  • queries with UNION is not supported;
  • offset from 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

Please use the main repository to report issues, send pull requests, or ask questions.

Comments