51

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?

Pat
  • 1,193
  • 1
  • 11
  • 36

1 Answers1

117

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, bob@example.

$user = User::firstOrCreate(['email' => 'bob@example.com']);

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

Now, lets say new@example.com doesn't exist.

$user2 = User::firstOrCreate(['email' => 'new@example.com']);

// the below will dump out true because this user was created
// in the current request lifecycle
var_dump($user2->wasRecentlyCreated);
Chuck Le Butt
  • 47,570
  • 62
  • 203
  • 289
Thomas Kim
  • 15,326
  • 2
  • 52
  • 42