Home » Php » In Laravel, is there a way to find out whether `firstOrCreate` created or if it found the row?

In Laravel, is there a way to find out whether `firstOrCreate` created or if it found the row?

Posted by: admin November 29, 2017 Leave a comment

Questions:

In Laravel, is there a way to differentiate between firstOrCreate creating the row and if finding out the row exists from before?

Or will I have to manually do a get() first, and then create the row?

Answers:

If you created the model in the current lifecycle, then the model’s wasRecentlyCreated attribute will be set to true. Otherwise, that attribute will be set to false.

In other words, lets say you have a user with the email, [email protected].

$user = User::firstOrCreate(['email' => '[email protected]']);

// the below will dump out false because this entry already existed
var_dump($user->wasRecentlyCreated);

Now, lets say [email protected] doesn’t exist.

$user2 = User::firstOrCreate(['email' => '[email protected]']);

// the below will dump out true because this user was created
// in the current request lifecycle
var_dump($user->wasRecentlyCreated);