Метод unless
Метод unless является противоположностью метода when и применяется к запросам Eloquent, коллекциям и в Blade-шаблонах. Он выполняет переданное замыкание только в том случае, если первое условие возвращает false. Если условие истинно, метод возвращает исходный объект без изменений. Первым параметром передаётся условие, вторым - замыкание, которое выполняется при ложном условии.
Синтаксис
<?php
Model::unless($condition, function ($query) {
// code
});
?>
Пример
Давайте применим дополнительную фильтрацию к запросу, если параметр 'filter' не передан:
<?php
use AppModelsArticle;
$filter = null;
$articles = Article::unless($filter, function ($query) {
return $query->where('status', 'published');
})->get();
foreach ($articles as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
["article 1", "article 2", "article 3"]
Пример
Давайте используем метод unless с коллекцией для условного применения операции:
<?php
use IlluminateSupportCollection;
$collection = collect([1, 2, 3, 4, 5]);
$shouldFilter = false;
$res = $collection->unless($shouldFilter, function ($items) {
return $items->filter(function ($item) {
return $item > 2;
});
});
print_r($res->toArray());
?>
Результат выполнения кода:
[3, 4, 5]
Пример
Давайте используем метод unless в Blade-шаблоне для условного отображения контента:
@unless ($articles->isEmpty())
<ul>
@foreach ($articles as $article)
<li>{{ $article->title }}</li>
@endforeach
</ul>
@endunless
Пример
Давайте передадим в метод unless замыкание в качестве условия для более сложной логики:
<?php
use AppModelsArticle;
use IlluminateSupportFacadesRequest;
$userType = 'guest';
$articles = Article::unless(function () use ($userType) {
return $userType === 'admin';
}, function ($query) {
return $query->where('is_published', true);
})->get();
foreach ($articles as $article) {
echo $article->title . "\n";
}
?>
Результат выполнения кода:
"article 1"
"article 2"