Метод findOr
Метод findOr применяется к запросу Eloquent
или Query Builder. Первым параметром передаётся
идентификатор записи, вторым - замыкание, которое
выполняется в случае, если запись не найдена.
Замыкание должно возвращать значение, которое
будет использовано в качестве результата метода.
Если замыкание не передано, метод возвращает null.
Синтаксис
<?php
Model::findOr($id, $callback);
?>
Пример
Давайте найдём пользователя с id равным 1.
Если пользователь не найден, вернём нового пользователя:
<?php
namespace AppHttpControllers;
use AppModelsUser;
class UserController extends Controller
{
public function show()
{
$user = User::findOr(1, function () {
return new User([
'name' => 'Guest',
'email' => 'guest@example.com'
]);
});
echo $user->name;
}
}
?>
Результат выполнения кода при отсутствии пользователя:
"Guest"
Пример
Применим метод к построителю запросов для поиска
статьи, у которой id равен 10. Если статья
не найдена, создадим новую с минимальными данными:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index()
{
$article = Article::findOr(10, function () {
$newArticle = new Article();
$newArticle->title = 'Default Article';
$newArticle->content = 'Empty content';
$newArticle->save();
return $newArticle;
});
echo $article->id . ': ' . $article->title;
}
}
?>
Результат выполнения кода при отсутствии статьи:
"11: Default Article"
Пример
Используем метод без замыкания, чтобы просто
получить null при отсутствии записи:
<?php
namespace AppHttpControllers;
use AppModelsCategory;
class CategoryController extends Controller
{
public function show()
{
$category = Category::findOr(99);
if ($category === null) {
echo 'Category not found';
} else {
echo $category->name;
}
}
}
?>
Результат выполнения кода при отсутствии категории:
"Category not found"
Смотрите также
-
метод
find,
который ищет запись по идентификатору и возвращаетnullпри отсутствии -
метод
findOrFail,
который выбрасывает исключение при отсутствии записи -
метод
firstOrNew,
который создаёт новый экземпляр модели при отсутствии результата -
метод
firstOrCreate,
который создаёт и сохраняет модель при отсутствии результата