Kshitiz Dhungel
Kshitiz Dhungel

Reputation: 37

Why duplication is occured?

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'students_email_unique' (SQL: insert into students (name, address, phone, email, faculty, updated_at, created_at) values (Librarian, maitidevi, 9738233231, [email protected], food, 2019-06-18 09:38:58, 2019-06-18 09:38:58)) Previous exceptions

public function update(Request $request, $id)
{
    $request->validate([

        'name' => 'required',
        'address' => 'required',
        'phone' => 'required',
        'email' => 'required|unique',
        'faculty' => 'required' 
    ]);


    Student::create($request->all());
    return redirect()->route('student.index')
    ->with('success', 'Student Updated Successfully');
}

When I validate with unique this also occurred: Validation rule unique requires at least 1 parameters.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Student;

class StudentController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $students = Student::latest()->paginate(5);
        return view('student.index', compact('students'))
                  ->with('i', (request()->input('page', 1) -1)*5);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        return view('student.create');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        $request->validate([

            'name' => 'required',
            'address' => 'required',
            'phone' => 'required',
            'email' => 'required',
            'faculty' => 'required'
        ]);


        Student::create($request->all());
        return redirect()->route('student.index')
        ->with('success', 'Student Created Successfully');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
       $student = Student::find($id);
       return view('student.detail', compact('student'));

    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
       $student = Student::find($id);
        return view('student.edit', compact('student'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $request->validate([

            'name' => 'required',
            'address' => 'required',
            'phone' => 'required',
            'email' => 'required',
            'faculty' => 'required'
        ]);


        Student::create($request->all());
        return redirect()->route('student.index')
        ->with('success', 'Student Updated Successfully');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {

        $student = Student::find($id);
        $student->delete();
        return redirect()->route('student.index')
                        ->with('success', 'Student deleted successfully');
    }
}

I am stuck in my above code? Please help what to do?

Upvotes: 0

Views: 73

Answers (1)

N69S
N69S

Reputation: 17206

In the validation of store method put this instead

'email' => 'required|unique:students,email',

in the Update method, you will need to build the validation rules like this

use Illuminate\Validation\Rule;
/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    \Validator::make($request->all(), [
        'name' => 'required',
        'address' => 'required',
        'phone' => 'required',
        'faculty' => 'required'
        'email' => [
            'required',
            Rule::unique('students', 'email')->ignore($id),
        ],
    ]);

    if ($validator->fails()) {
        return redirect()
                ->route('student.create')
                ->withErrors($validator)
                ->withInput();
    }

    $student = Student::findOrFail($id);
    foreach ($request->all() as $attribute => $value) {
        $student->{$attribute} = $value;
    }
    $student->save();
    return redirect()->route('student.index')
    ->with('success', 'Student Updated Successfully');

}

Upvotes: 3

Related Questions