Почему дублирование происходит? - PullRequest
0 голосов
/ 18 июня 2019

SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись 'admin@gmail.com' для ключа 'Students_email_unique' (SQL: вставить в students (name, address, phone), email, faculty, updated_at, created_at) значения (библиотекарь, maitidevi, 9738233231, admin@gmail.com, питание, 2019-06-18 09:38:58, 2019-06-18 09: 38: 58)) Предыдущие исключения

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');
}

Когда я проверяю с уникальным, это также происходит: уникальное правило валидации требует как минимум 1 параметр.

<?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');
    }
}

Я застрялв моем коде выше?Помогите пожалуйста что делать?

1 Ответ

3 голосов
/ 18 июня 2019

В методе валидации store вместо этого необходимо указать

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

в методе обновления, вам нужно будет создать правила валидации, подобные этому

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');

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...