Laravel покращує перевірку колекції, додаючи підтримку закриття до методу containsOneItem(), дозволяючи розробникам перевіряти, що саме один елемент задовольняє користувацькі умови, а не просто перевіряти розмір колекції.
Раніше containsOneItem() міг визначати лише те, чи містить колекція рівно один елемент всього. Удосконалений метод тепер приймає закриття, дозволяючи точну перевірку, що саме один елемент відповідає конкретним критеріям:
$collection = collect([1, 2, 3]);
$collection->containsOneItem(fn($item) => $item === 2); // true
$collection->containsOneItem(fn($item) => $item > 1); // false (2 and 3 match)
Це вдосконалення виявляється особливо цінним у сценаріях
class BusinessRuleValidator
{
public function validateTeamStructure(Collection $members)
{
// Ensure exactly one team lead exists
if (!$members->containsOneItem(fn($member) => $member->role === 'lead')) {
throw new ValidationException('Exactly one team lead required');
}
// Ensure exactly one budget approver
if (!$members->containsOneItem(fn($member) => $member->can_approve_budget)) {
throw new ValidationException('Exactly one budget approver required');
}
return true;
}
public function validateInvoiceItems(Collection $items)
{
$validations = [
'handling' => $items->containsOneItem(fn($item) => $item->type === 'handling'),
'processing' => $items->containsOneItem(fn($item) => $item->type === 'processing'),
'delivery' => $items->containsOneItem(fn($item) => $item->type === 'delivery')
];
foreach ($validations as $type => $isValid) {
if (!$isValid) {
throw new ValidationException("Exactly one {$type} fee required");
}
}
return $items;
}
}
перевірки бізнес-правил:Покращений метод containsOneItem() забезпечує точну перевірку збору, гарантуючи, що саме один елемент відповідає конкретним умовам, роблячи виконання бізнес-правил більш надійним і виразним.