آموزش Laravel

بروزرسانی(update) رکورد در لاراول

آموزش بروزرسانی در لاراول

بروزرسانی(update) رکورد در لاراول، در این مقاله نحوه بروزرسانی رکورد جدول دیتابیس را بر اساس فرم طراحی شده یاد خواهیم گرفت.

update رکورد در لاراول

update رکورد در لاراول

 

بروزرسانی یا update همانند insert کردن اطلاعات است. در پروژه های بک اند ما فرم هایی رو جهت ویرایش اطلاعات داریم، این فرم ها بر اساس شناسه یا ID رکورد اطلاعات موجود رو دریافت و در نهایت بازنویسی یا بروزرسانی می کنند.

بنابراین نیاز هست یک شناسه برای صفحاتی که فرم edit در آن قرار دارد ارسال شود تا فرم ما از طریق آن شناسه رکوردی را که باید update شود شناسایی کند.

مرحله به مرحله با هم پیش میریم تا این روند رو در یک مثال کاربردی ببینیم و درک کنیم. اگر مراحل نصب و پیکربندی دیتابیس در لاراول و همچنین استفاده از “Tailwind CSS” رو نمی دونید در دسته مقاله های آموزشی لاراول می تونید این مقاله ها رو مطالعه بفرمایید. 

 

مراحل بروزرسانی(update) رکورد در لاراول

1) من یک جدول به نام “posts”  در دیتابیسی با نام “laravelapp” با فیلدهای تصویر زیر دارم.

جدول دیتابیس MySQL

جدول دیتابیس MySQL

 

یک  پوشه به نام “blog” در پوشه “views” دارم که شامل فایل های “index.blade.php” جهت نمایش محتوای جدول و فایل دیگری به نام “edit.blade.php” شامل فرمی برای بروزرسانی رکوردها می باشد.

همچنین یک کنترلر با نام “PostController” برای مدیریت روت ها و متدها ایجاد کردم.

فایل روت “web.php” رو باز کنید و کدهای مربوط به روت های کنترلر رو به شکل زیر بنویسید.

				
					Route::prefix('/blog')->group(function () {
    Route::get('/create', [PostController::class, 'create'])->name('blog.create');
    Route::get('/', [PostController::class, 'index'])->name('blog.index');
    Route::get('/{id}', [PostController::class, 'show'])->name('blog.show');
    Route::post('/', [PostController::class, 'store'])->name('blog.store');
    Route::get('/edit/{id}', [PostController::class, 'edit'])->name('blog.edit');
    Route::patch('/{id}', [PostController::class, 'update'])->name('blog.update');
    Route::delete('/{id}', [PostController::class, 'destroy'])->name('blog.destroy');
});
				
			

روت مربوط به فایل “edit” که قرار هست پردازش بروزرسانی در آن انجام بشه در خط کد 6 می باشد.

 

2) در روت “index” که مربوط به نمایش محتوای جدول “posts” هست باید لینکی جهت ارسال شناسه رکورد مورد نظر جهت بروزسانی به صفحه “edit” تعریف کنیم.

				
					 <a href="{{ route('blog.edit', $post->id) }}" class="text-green-500 italic">Edit</a>
				
			

مقدار “id” گرفته شده از یک حلقه foreach هست که برای نمایش محتوا تعریف شده، کدینگ کامل فایل “index” به صورت زیر می باشد.

				
					<html>
<head>
    <meta charset="UTF-8">
    <meta
        name="viewport"
        content="width=device-width, initial-scale=1.0"
    />
    <meta
        http-equiv="X-UA-Compatible"
        content="ie=edge"
    />
    <title>
        Laravel App
    </title>
    @vite('resources/js/app.js')
</head>
<body data-rsssl=1 class="w-full h-full bg-gray-100">
    <div class="w-4/5 mx-auto">
        <div class="text-center pt-20">
            <h1 class="text-3xl text-gray-700">
                All Articles
            </h1>
            <hr class="border border-1 border-gray-300 mt-10">
        </div>

        <div class="py-10 sm:py-20">
            <a class="primary-btn inline text-base sm:text-xl bg-green-500 py-4 px-4 shadow-xl rounded-full transition-all hover:bg-green-400"
               href="{{ route('blog.create') }}">
                New Article
            </a>
        </div>
    </div>

   
    @foreach ($posts as $post)
    <div class="w-4/5 mx-auto pb-10">
      <div class="bg-white pt-10 rounded-lg drop-shadow-2xl sm:basis-3/4 basis-full sm:mr-8 pb-10 sm:pb-0">
          <div class="w-11/12 mx-auto pb-10">
              <h2 class="text-gray-900 text-2xl font-bold pt-6 pb-0 sm:pt-0 hover:text-gray-700 transition-all">
                  <a href="{{ route('blog.show', $post->id) }}">
                     {{ $post->title }}
                  </a>
              </h2>

              <img decoding="async" src="{{ $post->image_path }}" />
              <p class="text-gray-900 text-lg py-8 w-full break-words">
                  Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsa maiores nisi quasi tenetur voluptatem! At blanditiis dolor doloremque eaque, esse molestiae neque numquam quod repellat rerum sequi sit suscipit veritatis!
              </p>

              <span class="text-gray-500 text-sm sm:text-base">
                  Made by:
                      <a href=""
                         class="text-green-500 italic hover:text-green-400 hover:border-b-2 border-green-400 pb-3 transition-all">
                          Dary
                      </a>
                  on 13-07-2022
              </span>

              <a href="{{ route('blog.edit', $post->id) }}" class="text-green-500 italic">Edit</a>
          </div>
      </div>
  </div>
    @endforeach

   
</body>
</html>
				
			

3) حالا باید شناسه ارسال شده رو از طریق متد “edit” در کنترلر دریافت و به صفحه “edit.blade.php” ارسال کنیم ولی قبلش نیاز هست یک Model برای ارتباط با دیتابیس ایجاد کنیم که در اینجا مدلی به نام Post در پروژه ایجاد شده است.

				
					// PostController.php
public function edit($id)
    {
        return view('blog.edit', [
            'post' => Post::where('id', $id)->first()
        ]);
    }
				
			

در متد edit گفتیم که “id” دریافتی به صفحه “edit” که در پوشه “blog” قرار داره ارسال بشه به شرطی که مقدارش با مقدار موجود در ستون “id” جدول “post” برابر باشه.

 

4) وارد فایل “edit” میشم و کدهای زیر رو جهت دریافت محتوای رکورد ارسالی و قرار ادانشون در فیلدهای فرم می نویسم. 

				
					// edit.blade.php
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    @vite('resources/js/app.js')
</head>
<body data-rsssl=1>
<div class="w-4/5 mx-auto">
    <div class="text-center pt-20">
        <h1 class="text-3xl text-gray-700">
           Edit: ID:{{ $post->id }} - Title:{{ $post->title }}
        </h1>
        <hr class="border border-1 border-gray-300 mt-10">
    </div>

<div class="m-auto pt-20">
    <form
        action="{{ route('blog.update', $post->id) }}"
        method="POST"
        enctype="multipart/form-data">
        @csrf
        @method('PATCH')

        <label for="is_published" class="text-gray-500 text-2xl">
            Is Published
        </label>
        <input
            type="checkbox"
            {{ $post->is_published === true ? 'checked' : '' }}
            class="bg-transparent block border-b-2 inline text-2xl outline-none"
            name="is_published">

        <input
            type="text"
            name="title"
            value="{{ $post->title }}"
            class="bg-transparent block border-b-2 w-full h-20 text-2xl outline-none">

        <input
            type="text"
            name="excerpt"
            value="{{ $post->exerpt }}"
            class="bg-transparent block border-b-2 w-full h-20 text-2xl outline-none">

        <input
            type="number"
            name="min_to_read"
            value="{{ $post->min_to_read }}"
            class="bg-transparent block border-b-2 w-full h-20 text-2xl outline-none">

        <textarea
            name="body"
            placeholder="Body..."
            class="py-20 bg-transparent block border-b-2 w-full h-60 text-xl outline-none">
        {{ $post->body }}
        </textarea>
            
        <div class="bg-grey-lighter py-10">
            <label class="w-44 flex flex-col items-center px-2 py-3 bg-white-rounded-lg shadow-lg tracking-wide uppercase border border-blue cursor-pointer">
                    <span class="mt-2 text-base leading-normal text-black">
                        Select a file
                    </span>
                <input
                    type="file"
                    name="image_path"
                    class="hidden">
            </label>
        </div>

        <button
            type="submit"
            class="uppercase mt-15 bg-blue-500 text-gray-100 text-lg font-bold py-4 px-8 rounded-3xl">
            Submit Post
        </button>
    </form>
</div>
</body>
</html>
				
			

5) تو این مرحله باید داده هایی که از فرم صفحه “edit” دریافت می کنم رو پردازش کنم، برای اینکار وارد فایل کنترلر “PostController” میشم و متد “update” رو می نویسم.

				
					 public function update(Request $request, $id)
    {
        Post::where('id', $id)->update($request->except([
            '_token', '_method'
        ]));
         return redirect(route('blog.index'));
    }
				
			

اگر مراحل رو به درستی طی کرده باشید الان پردازش بروزرسانی رو می تونید انجام بدید.

 

جمع بندی

در این مقاله سعی کردم آموزش برورسانی رکورد رو با استفاده از فرم در لاراول به همراه مثال توضیح بدم. امیدوارم این مطلب براتون مفید واقع شده باشه.

لطفا اگر نظر و پیشنهادی در خصوص مطالب و پیشبرد آنها دارید خوشحال میشم در قسمت دیدگاه ها مطرح بفرمایید.

 

مقاله های آموزشی لاراول

کاربرد HTML

 jQuery

جاوا اسکریپت در 1 ساعت

کاربرد CSS

آموزش ReactJS

صفر تا صد PHP

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *