Метод tap
Метод tap применяется к запросу Eloquent или Query Builder
и позволяет выполнить произвольный код с текущим экземпляром
построителя запроса, не нарушая цепочку методов. Метод принимает
замыкание, в которое передаётся текущий экземпляр запроса.
Возвращает тот же запрос без изменений, что позволяет
продолжить цепочку методов.
Синтаксис
<?php
Model::tap(function ($query) {
// Дополнительные действия с $query
})->get();
?>
Пример
Давайте выполним отладку запроса перед его выполнением:
<?php
use AppModelsArticle;
$res = Article::where('status', 'published')
->tap(function ($query) {
echo "SQL: " . $query->toSql();
})
->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"SQL: select * from 'articles' where 'status' = ?"
"article 1"
"article 2"
"article 3"
Пример
Давайте запишем в лог количество записей перед выборкой:
<?php
use AppModelsArticle;
use IlluminateSupportFacadesLog;
$res = Article::where('status', 'published')
->tap(function ($query) {
$count = $query->count();
Log::info("Found {$count} published articles");
})
->orderBy('created_at', 'desc')
->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 3"
"article 2"
"article 1"
Пример
Давайте временно изменим параметры запроса для отладки:
<?php
use AppModelsArticle;
$res = Article::where('status', 'published')
->tap(function ($query) {
// Добавляем временное условие для отладки
$query->where('id', '>', 1);
})
->get();
foreach ($res as $article) {
echo $article->title;
}
?>
Результат выполнения кода:
"article 2"
"article 3"