Halo teman-teman semuanya, pada kesempatan kali ini kita semua akan belajar bagaimana cara melakukan proses update data menggunakan Rest API di dalam Laravel.
Disini kita juga akan membuat sebuah kondisi untuk upload gambar yang bersifat opsional. Yaitu jika ada sebuah request gambar baru, maka gambar yang lama akan kita hapus dari server dan kita gantikan dengan gambar yang baru.
Langkah 1 - Menambahkan Method Update
Sekarang kita akan menambahkan method untuk proses update data ke dalam database di dalam controller PostController. Silahkan buka file app/Http/Controllers/Api/PostController.php
, kemudian ubah semua kode-nya menjadi seperti berikut ini :
<?php
namespace App\Http\Controllers\Api;
use App\Models\Post;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Resources\PostResource;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;
class PostController extends Controller
{
/**
* index
*
* @return void
*/
public function index()
{
//get posts
$posts = Post::latest()->paginate(5);
//return collection of posts as a resource
return new PostResource(true, 'List Data Posts', $posts);
}
/**
* store
*
* @param mixed $request
* @return void
*/
public function store(Request $request)
{
//define validation rules
$validator = Validator::make($request->all(), [
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'title' => 'required',
'content' => 'required',
]);
//check if validation fails
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
//upload image
$image = $request->file('image');
$image->storeAs('public/posts', $image->hashName());
//create post
$post = Post::create([
'image' => $image->hashName(),
'title' => $request->title,
'content' => $request->content,
]);
//return response
return new PostResource(true, 'Data Post Berhasil Ditambahkan!', $post);
}
/**
* show
*
* @param mixed $post
* @return void
*/
public function show(Post $post)
{
//return single post as a resource
return new PostResource(true, 'Data Post Ditemukan!', $post);
}
/**
* update
*
* @param mixed $request
* @param mixed $post
* @return void
*/
public function update(Request $request, Post $post)
{
//define validation rules
$validator = Validator::make($request->all(), [
'title' => 'required',
'content' => 'required',
]);
//check if validation fails
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
//check if image is not empty
if ($request->hasFile('image')) {
//upload image
$image = $request->file('image');
$image->storeAs('public/posts', $image->hashName());
//delete old image
Storage::delete('public/posts/'.$post->image);
//update post with new image
$post->update([
'image' => $image->hashName(),
'title' => $request->title,
'content' => $request->content,
]);
} else {
//update post without image
$post->update([
'title' => $request->title,
'content' => $request->content,
]);
}
//return response
return new PostResource(true, 'Data Post Berhasil Diubah!', $post);
}
}
Dari perubahan kode di atas, pertama kita import Facades Storage
dari Laravel. Facades ini banyak fungsinya, salah satunya akan kita gunakan untuk menghapus gambar dari server.
use Illuminate\Support\Facades\Storage;
Kemudian, kita menambahkan method baru dengan nama update
. DImana di dalamnya kita membuat sebuah validasi untuk pengecekan data yang dikirim.
//define validation rules
$validator = Validator::make($request->all(), [
'title' => 'required',
'content' => 'required',
]);
Untuk penjelassan validasi di atas sama seperti yang ada di dalam method store
.
Jika data yang dikirimkan oleh request belum sesuai, maka kita akan lakukan return menggunakan JSON dengan status code 422
dan memberikan informasi error validasi.
//check if validation fails
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
Tapi, jika data yang dikirimkan sudah sesuai, maka selanjutnya kita melakukan pengecekan untuk request file gambar. Jika ada sebuah requets gambar baru, maka kita akan melakukan upload gambar tersebut dan menghapus gambar yang lama dari server.
//check if image is not empty
if ($request->hasFile('image')) {
//upload gambar baru
//hapus gambar lama
//update data dengan gambar baru
} elese {
//update data tanpa gambar
}
Jika proses update berhasil dilakukan, maka kita akan return menggunakan PostResource
dengan memberikan beberapa parameter.
return new PostResource(true, 'Data Post Berhasil Diubah!', $post);
Langkah 2 - Uji Coba Rest API
Sekarang kita akan lakukan proses uji coba update data post. Silahkan buka aplikasi Postman, kemudian masukkan URL berikut ini http://localhost:8000/api/posts/1 dan untuk method-nya silahkan pilih POST
.
INFORMASI : di atas, kita uji coba dengan data yang memiliki ID 1
.
Kemudian, silahkan klik tab Body
, kemudian pilih form-data
dan masukkan key
dan value
berikut ini :
KEY |
TYPE |
VALUE |
image |
file |
Silahkan pilih gambar dari komputer (Tidak Wajib Diisi). |
title |
text |
Silahkan disesuaikan sendiri. |
content |
text |
Silahkan disesuaikan sendiri. |
_method |
text |
PUT |
Jika sudah, silahkan klik Send
dan jika berhasil maka akan menampilkan data dengan format JSON yang berisi informasi update post berhasil dilakukan.
{
"success": true,
"message": "Data Post Berhasil Diubah!",
"data": {
"id": 1,
"image": "l8vWIZeqKBKKKK5SUz6F2IphIxmFZlKYgfHIzysk.png",
"title": "Belajar Rest API di Laravel 9 - Test Update",
"content": "Belajar Rest API di Laravel 9",
"created_at": "2022-02-12T03:32:49.000000Z",
"updated_at": "2022-02-12T11:29:52.000000Z"
}
}
Sampai disini pembahasan bagaimana cara melakukan update data menggunakan Rest API di dalam Laravel. Di artikel berikutnya kita bersama-sama akan belajar bagaimana cara melakukan hapus data dari database menggunakan Rest API di Laravel.
Terima Kasih