📅  最后修改于: 2023-12-03 15:21:52.194000             🧑  作者: Mango
在 Laravel 中,一个 Collection 可以用来包含一组 Eloquent 模型,查询结果或任何其他数据集合。有时候,我们需要从 Collection 中排除一些行,本文将介绍如何进行操作。
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'],
]
*/
如果我们想根据一个数组中的值来排除 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'],
]
*/
如果我们有两个 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,进一步进行操作和处理。