Метод firstOrNew
Метод firstOrNew применяется к запросу Eloquent
и позволяет найти первую запись, соответствующую условиям.
Если запись не найдена, метод возвращает новый экземпляр
модели с переданными атрибутами. В отличие от firstOrCreate,
данный метод не сохраняет модель автоматически в базу данных -
требуется явно вызвать метод save.
Первым параметром передаётся массив условий для поиска,
вторым - массив дополнительных атрибутов для создания.
Синтаксис
<?php
Model::firstOrNew($conditions, $attributes);
?>
Пример
Давайте найдём пользователя с 'email' равным 'user@example.com'.
Если пользователь не найден, создадим новый экземпляр:
<?php
use AppModelsUser;
$user = User::firstOrNew(
['email' => 'user@example.com'],
['name' => 'John Doe', 'age' => 30]
);
if ($user->exists) {
echo "User found: " . $user->name;
} else {
echo "New user created: " . $user->name;
}
?>
Результат выполнения кода:
"New user created: John Doe"
Пример
Рассмотрим случай, когда запись уже существует в базе данных.
Используем условия для поиска статьи с 'slug' равным 'laravel-article':
<?php
use AppModelsArticle;
$article = Article::firstOrNew(
['slug' => 'laravel-article']
);
if ($article->exists) {
echo "Article found: " . $article->title;
} else {
echo "Article not found, new instance created";
}
?>
Результат выполнения кода:
"Article found: Laravel Basics"
Пример
Используем метод для создания новой модели с дополнительными
атрибутами, которые не участвуют в поиске.
Поиск выполняется по полю 'phone', а поле 'role'
устанавливается только для нового экземпляра:
<?php
use AppModelsUser;
$user = User::firstOrNew(
['phone' => '+1234567890'],
['name' => 'Jane Smith', 'role' => 'admin']
);
if (!$user->exists) {
$user->save();
echo "New user saved with role: " . $user->role;
} else {
echo "Existing user found: " . $user->name;
}
?>
Результат выполнения кода:
"New user saved with role: admin"
Смотрите также
-
метод
firstOrCreate,
который создаёт и сохраняет модель автоматически -
метод
updateOrCreate,
который обновляет существующую запись или создаёт новую -
метод
first,
который возвращает первую запись из результата запроса -
метод
save,
который сохраняет модель в базу данных