📜  从 clooection laravel 中排除行 - PHP (1)

📅  最后修改于: 2023-12-03 15:21:52.194000             🧑  作者: Mango

从 Collection Laravel 中排除行

在 Laravel 中,一个 Collection 可以用来包含一组 Eloquent 模型,查询结果或任何其他数据集合。有时候,我们需要从 Collection 中排除一些行,本文将介绍如何进行操作。

使用 reject 方法

reject 方法可以接受一个闭包函数作为参数,该闭包函数用于过滤 Collection 中的元素。如果闭包函数返回 false,则该元素将被保留;如果返回 true,则该元素将被排除。

例如,以下示例从 Collection 中排除了所有 id 大于 2 的元素:

$collection = collect([
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
    ['id' => 3, 'name' => 'Tom'],
    ['id' => 4, 'name' => 'Mary']
]);

$filtered = $collection->reject(function ($value, $key) {
    return $value['id'] > 2;
});

$filtered->all();

/*
输出:
[
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
]
*/
使用 whereNotIn 方法

如果我们想根据一个数组中的值来排除 Collection 中的元素,可以使用 whereNotIn 方法。该方法接受两个参数,第一个参数为要过滤的数组字段,第二个参数为要排除的值。

例如,以下示例从 Collection 中排除了所有名字为 "Tom" 和 "Mary" 的元素:

$collection = collect([
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
    ['id' => 3, 'name' => 'Tom'],
    ['id' => 4, 'name' => 'Mary']
]);

$filtered = $collection->whereNotIn('name', ['Tom', 'Mary']);

$filtered->all();

/*
输出:
[
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
]
*/
使用 diff 方法

如果我们有两个 Collection,想要从其中一个 Collection 中排除与另一个 Collection 中相同的元素,可以使用 diff 方法进行操作。

例如,以下示例从 $collection1 中排除了与 $collection2 中相同的元素:

$collection1 = collect([
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
    ['id' => 3, 'name' => 'Tom'],
]);

$collection2 = collect([
    ['id' => 3, 'name' => 'Tom'],
    ['id' => 4, 'name' => 'Mary']
]);

$filtered = $collection1->diff($collection2);

$filtered->all();

/*
输出:
[
    ['id' => 1, 'name' => 'John'],
    ['id' => 2, 'name' => 'Jane'],
]
*/
结论

以上介绍了三种方法,可以用来从 Collection Laravel 中排除行。具体使用哪种方法取决于具体的应用场景。使用这些方法之后,我们可以得到过滤后的 Collection,进一步进行操作和处理。