Метод unless
Метод unless применяется к запросу Eloquent
или Query Builder и позволяет применять замыкание
только в том случае, если переданное условие является
ложным. Если условие истинно, замыкание не выполняется,
и запрос остаётся неизменным. В качестве первого параметра
передаётся условие, вторым - замыкание, которое получает
экземпляр запроса.
Синтаксис
<?php
Model::unless($condition, function ($query) {
// Применяем условия, если $condition === false
});
?>
Пример 1
Давайте условно применим фильтрацию к запросу,
если переменная 'status' не равна 'published':
<?php
use AppModelsArticle;
$status = 'draft';
$res = Article::unless($status === 'published', function ($query) {
$query->where('status', 'draft');
})->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article draft 1"
"article draft 2"
Пример 2
Давайте условно применим сортировку,
если включена опция 'sort':
<?php
use AppModelsArticle;
$sort = false;
$res = Article::unless($sort, function ($query) {
$query->orderBy('id', 'desc');
})->get();
foreach ($res as $article) {
echo $article->id . ' ' . $article->title;
}
?>
Результат выполнения кода:
"5 article 5"
"4 article 4"
"3 article 3"
"2 article 2"
"1 article 1"
Пример 3
Давайте условно применим поиск по 'id',
если параметр передан в запросе:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index(Request $request)
{
$id = $request->input('id');
$res = Article::unless(!$id, function ($query) use ($id) {
$query->where('id', $id);
})->get();
foreach ($res as $article) {
echo $article->title;
}
}
}
?>