【问题标题】:Why duplication is occured?为什么会出现重复?
【发布时间】:2019-06-19 04:29:47
【问题描述】:

SQLSTATE[23000]:完整性约束违规:1062 键“students_email_unique”的重复条目“admin@gmail.com”(SQL:插入studentsnameaddressphone、@987654325 @,facultyupdated_atcreated_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');
    }
}

我卡在上面的代码中?请帮忙怎么办?

【问题讨论】:

  • 在我的回复中编辑了更新方法以使其更清晰。您不能在控制器的更新方法中再次使用Create

标签: php laravel


【解决方案1】:

store 方法的验证中把这个改为

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

在 Update 方法中,您需要像这样构建验证规则

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

}

【讨论】:

  • 未定义变量:验证器,我应该使用这个:$valodator -> $validator
  • 在代码use Illuminate\Support\Facades\Validator;顶部添加Validator命名空间
  • @Gabrielle 不需要,该外观在根命名空间上有一个别名,只是一个 '\' 后缀
猜你喜欢
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
  • 2019-07-17
  • 1970-01-01
相关资源
最近更新 更多