laravel - 检查该元素在集合中依次出现

标签 laravel eloquent laravel-collection

我有一个通过 hasMany 从数据库返回的集合-关系。

$items = collect([
    [
        'ref' => 'efaef954',
        'children' => collect([
            [
                'ref' => 'wetk4',
                'order' => 1,
            ],
            [
                'ref' => 'wetk5',
                'order' => 2,
            ],
            [
                'ref' => 'wetk6',
                'order' => 3,
            ],
        ]),
    ],
    [
        'ref' => 'efgjlf954',
        'children' => collect([
            [
                'ref' => 'wetk5',
                'order' => 1,
            ],
            [
                'ref' => 'wetk6',
                'order' => 2,
            ],
            [
                'ref' => 'wetk4',
                'order' => 3,
            ],
        ]),
    ],
]);
$items -collection 可以包含任意数量的带有 child 的项目。这些 child 有一个特定的顺序,在它们被排序之前是随机的。
在我的用户界面中,我可以输入子项的引用以获取符合条件的父项。只有具有我输入的特定顺序的父项,例如wetk4wetk6应该被退回。
return $items->filter(fn ($item) => $item->children->contains('wetk4') && $item->children->contains('wetk6'))
这将正确地为我提供带有子项的项目,但这并没有考虑到以下事实:考虑到某些项目将具有相同的子项,因此项目符合条件的顺序很重要。
我还没有找到一个优雅的解决方案,试图只使用集合函数。

最佳答案

我想我会尝试使用宏来扩展 Laravel 集合,您应该在其中实现自定义功能。之后该宏可以用于任何 Laravel 集合
更多详情:https://laravel.com/docs/8.x/collections#extending-collections

关于laravel - 检查该元素在集合中依次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66764676/

相关文章:

php - 将某一行设置为 1,其他设置为 0 用 Eloquent 表达

php - json 资源和资源集合有什么区别?在 Laravel

Laravel cursorPagination 返回混合了数组和对象的结果

php - 如何从 Laravel 的表中获取所有行(也软删除)?

json - 如何将 Laravel 集合数组转换为 json

laravel - 如果键值相同,如何合并 Laravel 集合?或添加新的数据行

php - Laravel Forge 定制 vps

laravel - 不在枢纽分析表中

java - 从 PHP 调用 .jar 文件 - Stanford NLP - 无法找到或加载主 java 类

php - 使用表达式或 jQuery 更改 Laravel Blade 中的 div 宽度