راکت
Mahsa_Kdb
Mahsa_Kdb
توسط Mahsa_Kdb مطرح شد
8 پاسخ

عدم کار کردن Update برای تغییر داده My SQL به وسیله Laravel

در این کد، از Delete و Update برای تغییر داده My SQL استفاده کرده‌ام، متاسفانه Update آن کار نمیکند و هیچ خطایی هم نمیدهد و مستقیم به جدول اصلی من برمیگردد بدون آن که تغییری کرده باشد، علت آن چیست؟
همچنین نام جدول من members است. زمانی که از echo استفاده میکنم اطلاعات به روز را نشان میدهد اما زمانی که اطلاعات را ذخیره کرده و به جدول اصلی redirect میکنم، تغییری را مشاهده نمیکنم، امکانش هست راهنمایی بفرمایید.
کد List:

<h1>Member List</h1>
<table border="1">
    <tr>
        <td>Id</td>
        <td>Name</td>
        <td>Email</td>
        <td>Address</td>
        <td>Operation</td>
    </tr>
@foreach($members as $Member)
    <tr>
        <td>{{$Member['Id']}}</td>
        <td>{{$Member['Name']}}</td>
        <td>{{$Member['Email']}}</td>
        <td>{{$Member['Address']}}</td>
        <td>
            <a href={{"delete/".$Member['Id']}}>Delete</a>
            <a href={{"edit/".$Member['Id']}}>Edit</a>
        </td>
    </tr>
@endforeach
</table>

کد Route:

Route::get("list",[MemberController::class,'list']);
Route::get("delete/{Id}",[MemberController::class,'delete']);
Route::get("edit/{Id}",[MemberController::class,'showData']);
Route::post("edit",[MemberController::class,'update']);

کد Edit:

<h1>Update Member</h1>
<form action="/edit" method="POST">
@CSRF
<input type="hidden" name="Id" value="{{$Member['Id']}}"> <br> <br>
<input type="text" name="Name" value="{{$Member['Name']}}"> <br> <br>
<input type="text" name="Email" value="{{$Member['Email']}}"> <br> <br>
<input type="text" name="Address" value="{{$Member['Address']}}"> <br> <br>
<button type="submit">Update</button>
</form>

کد Controller:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Member;
USE DB;

class MemberController extends Controller
{
    //
    function list()
    {
        $Member=Member::all();
        return view('list',['members'=>$Member]);
    }
    public function delete($Id)
    {
        $Member=Member::find($Id);
        $Member->where('Id',$Id)->delete();
        return redirect('list');
    }
    function showData($Id)
    {
        $Member=Member::find($Id);
        return view('edit',['Member'=>$Member]);
    }
    function update(Request $req)
    {
        $Member=Member::find($req->Id);
        $Member->Name=$req->Name;
        $Member->Email=$req->Email;
        $Member->Address=$req->Address;
        // $Member->save();
        echo $Member;
        // return redirect('list');
    }
}

ثبت پرسش جدید
محمد عابدی
محمد عابدی
تخصص :Senior Web Developer
@abedim9105 سال پیشمطرح شد
0
$Member->save();

رو آنکامنت کنید مشکلتون برطرف میشه


Mahsa_Kdb
Mahsa_Kdb
@Mahsa.Kdb5 سال پیشمطرح شد
0

@abedim910
بله، این خط متاسفانه کار نمی‌کند و من به صورت کامنت آنجا آورده‌ام، زمانی که از echo استفاده می‌کنم، اطلاعات آپدیت شده را نشان می‌دهد اما زمانی که دو خط کامنت شده را استفاده می‌کنم، به جدول اصلی من بدون تغییر redirect میشود.


علی بیات
علی بیات
تخصص :توسعه دهنده ارشد وب
@ali.bayat5 سال پیشمطرح شد
0

مدل Member رو چک کن
ببین فیلدهایی که سعی داری آپدیت کنی
داخل fillate$ هستند یا نه؟


Mahsa_Kdb
Mahsa_Kdb
@Mahsa.Kdb5 سال پیشمطرح شد
0

@ali.bayat
بله، داخل user.php این موارد لحاظ شده است.

    protected $fillable = [
        'Name',
        'Email',
        'Address'
        // 'password',
    ];

حسین صادقی
حسین صادقی
@Hossein.sadeGHi5 سال پیشمطرح شد
0

سلام به این صورت اعمال کنید

function update(Request $req)
{
        $Member = Member::find($req->Id);
        DB::table('members')
            ->where('Id', $Member)
            ->update([
               'Name'=>$req->Name,
                'Email'=>$req->Email,
                'Address'=>$req->Address,
            ]);
}

Mahsa_Kdb
Mahsa_Kdb
@Mahsa.Kdb5 سال پیشمطرح شد
0

@Hossein.sadeGHi
زمانی که تابع update را تغییر میدهم، بعد از تغییر داده صفحه سفیدی باز میشود اما تغییر روی داده ایجاد نمیشود.


Mahsa_Kdb
Mahsa_Kdb
@Mahsa.Kdb5 سال پیشمطرح شد
0

@Hossein.sadeGHi
البته من این دو خط را اضافه کردم، به جدول اصلی من بدون تغییر برمیگردد.

        $Member->save();
        return redirect('list');

bahman x
bahman x
@bahmanroocket5 سال پیشمطرح شد
0

بهتره شما تغییراتتون رو commit کنید و از try catch برای هندل کردن خطا استفاده کنید.

DB::beginTransaction();
        try {
            Member::where(['id' => $req->Id])->update(['Name' => $req->Name,'Email'=>$req->Email]);
            DB::commit();
            return 'true';
        } catch (\Exception $exception) {
            DB::rollBack();
            return 'false';
        }

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام