Stop checking if record exists: Eloquent methods OrCreate and OrNew

Another “hidden gem” of Laravel which is surprisingly rarely used or even known, though it’s mentioned in the official Eloquent documentation. Imagine that you have a record, and you need to check if that record already exists in the database – to prevent duplicate, you wouldn’t save it second time. There’s an elegant way to perform it in Eloquent.

Let’s take an example – a user with email (real email, feel free to get in touch!).

Typical code would be:

Now, what if I told you…

Yup, it’s that easy. This sentence performs the same thing – checks the user by email, and if it doesn’t exist – creates the record, filling the extra fields with the array in the second parameter.

There’s also a method called firstOrNew(). It works almost identically to firstOrCreate(), except that it doesn’t actually create a record in DB – it just returns a new Eloquent model object which then you can modify before saving:

But that’s not all! You can do pretty much the same thing for updating the record.

Instead of:

Do this:

Same logic of parameters here – Laravel will check for email field, and if it finds the record, it will get updated with first_name and last_name, otherwise new entry will be created with all those three fields.

Some more info and a different example – in the official Eloquent documentation.

Want to generate Laravel adminpanel online?
You don't need any packages to do that!

4 thoughts on “Stop checking if record exists: Eloquent methods OrCreate and OrNew

  1. I tried the updateOrcreate method.

    The updateOrcreate method I use.
    I have multiple select box edit form. For example: Initially I save the education data of High School graduates, Bachelor’s Degree and Master’s Degree . Then I want to turn into a graduate of Senior High School and Bachelor’s Degree . What is the example code to remove a graduate of Master’s Degree in multiple select boxes?

Leave a Reply

Your email address will not be published. Required fields are marked *