Reputation: 37
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '[email protected]' for key 'students_email_unique' (SQL: insert into
students
(name
,address
,phone
,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
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