Wongsatron Dongnin
Wongsatron Dongnin

Reputation: 25

laravel Integrity constraint violation

Please check if the update of my information is correct or not.

error Integrity constraint violation: 1062 Duplicate entry '45' for key 'PRIMARY' (SQL: update `studentdetails` set `SID` = 45, `fname` = sds, `lname` = sad, `dob` = 2020-04-22, `gender` = male, `created_at` = 2020-04-29 11:55:43)" 

Composite key

Table studentdetail

SID pk, 
fname, 
lname, 
dob, 
gender


Table studentaddress

SID pk,
zipcode pk,
street,
hname,
city,
state,
country


Table studentenrollment

SID pk,
grade pk,
edate


Controller:

public function update($SID,Request $request)
{

    if(is_numeric($SID))

    {

        $SID = $request->get('SID');
        $fname = $request->get('fname');
        $lname = $request->get('lname');
        $dob = $request->get('dob');
        $gender = $request->get('gender');
        $zipcode = $request->get('zipcode');
        $city = $request->get('city');
        $state = $request->get('state');
        $country = $request->get('country');
        $street = $request->get('street');
        $hname = $request->get('hname');
        $grade = $request->get('grade');
        $edate = $request->get('edate');

        if(is_numeric($SID) && !empty($fname) && !empty($lname) && !empty($dob) && !empty($gender)
        && is_numeric($zipcode) && !empty($city) && !empty($state) && !empty($street) && !empty($hname) && !empty($country)
        && !empty($grade) && !empty($edate))

        {

            DB::table('studentdetails')->update([
                'SID' =>$SID,
                'fname' =>$fname,
                'lname' =>$lname,
                'dob' =>$dob,
                'gender' =>$gender,
                'created_at' =>date('Y-m-d H:i:s'),

            ]);


            DB::table('studentaddress')->update([
                'SID' =>$SID,
                'zipcode' =>$zipcode,
                'city' =>$city,
                'state' =>$state,
                'country' =>$country,
                'street' =>$street,
                'hname' =>$hname,
                'created_at' =>date('Y-m-d H:i:s'),
            ]);

            DB::table('studentenrollment')->update([
                'SID' =>$SID,
                'grade' =>$grade,
                'edate' =>$edate,
                'created_at' =>date('Y-m-d H:i:s'),
            ]);

            return MyResponse::success('ระบบได้บันทึกข้อมูลเรียบร้อยแล้ว','/student');
        }else{
            return MyResponse::error('กรุณาป้อนข้อมูลให้ครบ');
        }
    }

Upvotes: 0

Views: 80

Answers (1)

Jithesh Jose
Jithesh Jose

Reputation: 1814

Change the logic..You can't update primary key of a table..you can update other columns using that primary key..that is the only thing...Otherwise you have to make SID as a non primary key.

public function update($SID,Request $request)
{

    if(is_numeric($SID))

    {

        $SID = $request->get('SID');
        $fname = $request->get('fname');
        $lname = $request->get('lname');
        $dob = $request->get('dob');
        $gender = $request->get('gender');
        $zipcode = $request->get('zipcode');
        $city = $request->get('city');
        $state = $request->get('state');
        $country = $request->get('country');
        $street = $request->get('street');
        $hname = $request->get('hname');
        $grade = $request->get('grade');
        $edate = $request->get('edate');

        if(is_numeric($SID) && !empty($fname) && !empty($lname) && !empty($dob) && !empty($gender)
        && is_numeric($zipcode) && !empty($city) && !empty($state) && !empty($street) && !empty($hname) && !empty($country)
        && !empty($grade) && !empty($edate))

        {
            $studentdetails = DB::table('studentdetails')->where('SID',$SID)->first();

                $studentdetails->fname =$fname;
                $studentdetails->lname = $lname;
                $studentdetails->dob = $dob;
                $studentdetails->gender = $gender;
                $studentdetails->created_at = date('Y-m-d H:i:s');
                $studentdetails->save();
            $studentaddress = DB::table('studentaddress')->where('SID',$SID)->first();

                $studentaddress->zipcode =$zipcode;
                $studentaddress->city = $city;
                $studentaddress->state = $state;
                $studentaddress->country = $country;
                $studentaddress->street  = $street;
                $studentaddress->hname = $hname;
                $studentaddress->created_at = date('Y-m-d H:i:s');
                $studentaddress->save();

            $studentenrollment = DB::table('studentaddress')->where('SID',$SID)->first();

                $studentenrollment->grade = $grade;
                $studentenrollment->edate = $edate;
                $studentenrollment->created_at = date('Y-m-d H:i:s');
                $studentenrollment->save();

            return MyResponse::success('ระบบได้บันทึกข้อมูลเรียบร้อยแล้ว','/student');
        }else{
            return MyResponse::error('กรุณาป้อนข้อมูลให้ครบ');
        }
    }

Upvotes: 1

Related Questions