Search code examples
phplaravelcrud

Why is my CRUD application's update function not working in Laravel?


I encountered difficulty with the update function. Even after the data has been updated, it does not change. Is there something wrong with my code?

Controller

public function update(Request $request, Mahasiswa $mahasiswa)
{
    $validatedata = $request->validate([
        'nim'           => 'required|size:8|unique:mahasiswas,nim,'.$mahasiswa->id,
        'Nama'          => 'required|min:3|max:50',
        'jenis_kelamin' => 'required|in:P,L',
        'jurusan'       => 'required',
        'alamat'        => '',
    ]);

Mahasiswa::where('id',$mahasiswa->id)->update($validateData);

  //$mahasiswa->update($validatedata);

 return redirect()->route('mahasiswas.show',['mahasiswa' => $mahasiswa->id])
 ->with('pesan',"Update data {$validatedata['nama']} berhasil");
}

Model

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class mahasiswa extends Model
{
    use HasFactory;
    protected $guarded = [];
}

Migration

public function up()
{
    Schema::create('mahasiswas', function (Blueprint $table) {
        $table->id();
        $table->char('nim', 8)->unique();
        $table->string('nama');
        $table->char('jk',1);
        $table->string('jurusan');
        $table->text('alamat')->nullable();
        $table->timestamps();
    });
}

Solution

  • Your code has some issues that need to be addressed. Your model should be Capitalized (class Mahasiswa). On your controller, you don't need to search for the instance as you already are receiving it on the controller (Mahasiswa $mahasiswa). You're saving your validated data in $validatedata but then you're referring to it as $validateData. finally, make sure all the data you want to save has an corresponding table column (everything should be lowercase, and if you want to store jenis_kelamin you should add a column for it).