lastdragon-ru/lara-asp-eloquent

Laravel - Eloquent 助手包的强大集合。

6.4.2 2024-09-20 13:09 UTC

README

此包包含用于 Eloquent 的有用扩展和混合。

要求

安装

composer require lastdragon-ru/lara-asp-eloquent

迭代器

迭代器类似于 Builder::chunk(),但使用生成器代替 \Closure,这使得代码更易于阅读。

$query = \App\Models\User::query();

$query->chunk(100, function ($users) {
    foreach ($users as $user) {
        // ...
    }
});

foreach ($query->getChunkedIterator() as $user) {
    // ...
}

迭代器还支持限制/偏移量,默认情况下,它将尝试从 Builder 中获取它们,但您也可以手动设置它们。

$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
}

当您使用默认的 ChunkedIterator 时,您不应在迭代过程中修改/删除项目,否则您可能会得到意外的结果(例如,缺少项目)。如果您需要在迭代过程中修改/删除项目,您可以使用专门为此情况创建的 ChunkedChangeSafeIterator,与标准 chunkById() 不同,它始终是安全的(请参阅 laravel/framework#35400 获取更多详细信息)。但是存在一些限制。

  • 无法对行进行排序,它们始终按 列升序 排序;
  • 在迭代过程中不应更改 ,否则可能会导致结果中出现重复行;
  • 在迭代过程中插入的行可能会被跳过,如果它具有小于内部指针的 值;
  • 不支持带有 UNION 的查询;
  • Builder 的 offset 不会使用;

要创建一个安全变更实例,您可以使用

$query = \App\Models\User::query();

foreach ($query->getChangeSafeIterator() as $user) {
    // ...
}

混合

\Illuminate\Database\Eloquent\Builder

升级

请遵循 升级指南

贡献

此包是 Laravel 强大包集合的一部分。请使用 主仓库报告问题、发送 pull request提问