Laravel Eloquent updateOrCreate()

В этом посте мы рассмотрим, как используется Laravel Eloquent updateOrCreate() и какова его важность. Laravel предоставляет updateOrCreate(), чтобы помочь нам обновить запись, если она существует, и создать, если нет.

Преимущества метода

Этот метод помогает нам не проверять вручную, существует ли запись, а затем обновлять, если нет, то создавать. Ниже приведен мой пример без Laravel updateOrCreate() и с Laravel updateOrCreate().

Пример без updateOrCreate()

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $title = 'Post 38';
        $description = 'Description for post 38 - updated.';
        $body = 'Body for post 38.';

        $post = Post::where('title', $title)->first();

        if(is_null($post)) {
            $post = new Post([
                'title' => $title,
                'description' => $description,
                'body' => $body
            ]);
            $post->save();
        } else {
            $post->description = $description;
            $post->body = $body;
            $post->update();
        }

        print_r($post);die;
    }
}

Пример с updateOrCreate()

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class PostsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $post = Post::updateOrCreate([
            'title' => 'Post 3'
        ], [
            'description' => 'Description for post 3.',
            'body' => 'body for post 3 - updated.'
        ]);

        print_r($post);die;
    }
}

Как видно из приведенного выше кода, у нас есть те же функции для обновления или создания, но с реализацией метода Laravel updateOrCreate() мы сокращаем наш код.