Norway


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

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

Typical code would be:

$user = User::where('email', 'povilas@laraveldaily.com')->first();
if (!$user) {
  $user = User::create([
    'email' => 'povilas@laraveldaily.com',
    'first_name' => 'Povilas',
    'last_name' => 'Korop',
  ]);
}

Now, what if I told you…

$user = User::firstOrCreate(['email' => 'povilas@laraveldaily.com'], 
  ['first_name' => 'Povilas', 'last_name' => 'Korop']);

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.

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

Instead of:

$user = User::where('email', 'povilas@laraveldaily.com')->first();
if ($user) {
  $user->update([
    'first_name' => 'Povilas',
    'last_name' => 'Korop',
  ]);
} else {
  $user = User::create([
    'email' => 'povilas@laraveldaily.com',
    'first_name' => 'Povilas',
    'last_name' => 'Korop',
  ]);  
}

Do this:

$user = User::updateOrCreate(['email' => 'povilas@laraveldaily.com'], 
  ['first_name' => 'Povilas', 'last_name' => 'Korop']);

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.

The post Stop checking if record exists: Eloquent methods OrCreate and OrNew appeared first on Laravel Daily.



Source link

LEAVE A REPLY

Please enter your comment!
Please enter your name here