I'm using Laravel's function firstOrNew()
to create a new user or find and update an existing one.
How can I know, after the object is created, if it existed before or if it's a new object?
The idea is something like this:
$user = \App\User::firstOrNew([
'email' => $userData->getEmail(),
'name' => $userData->getName(),
]);
if ($user->new) { // some way to check
// user was created now
} else {
//user already existed
}
firstOrNew()
This function will either return the first record from the database, or instantiate a new model instance that does not yet exist in the database. Therefore, if you'd like to check if the instance was pulled from the database or if it is a new instance, you can check the
exists
property (not function) on the model.The original question was about
firstOrNew()
, but a lot of people seem to come here forfirstOrCreate()
, as well.firstOrCreate()
is different, and requires a different check.firstOrCreate()
This function will either return the first record from the database, or create a new record in the database and return that. Since a newly created record would exist in the database, you can't check the
exists
property, because it'll be true in both instances. However, you can check thewasRecentlyCreated
property. This property will be true if the current model instance was just created in the database, or false if it was already in the database.