【问题标题】:Data is not updating in database on update Laravel 5.2更新 Laravel 5.2 时数据库中的数据未更新
【发布时间】:2016-04-04 12:24:49
【问题描述】:

我只是在我的应用程序中实现 CRUD,但 UPDATE 没有更新数据库中的数据 I var_dump($user->name) 但它什么也没输出。请看一下代码并帮助我。我正在使用 Laravel 5.2 和资源控制器。

PS:编辑工作正常,例如在此 URL http://localhost/pos/users/6/edit?id=6 上,我可以使用所需数据填充视图字段,但是当我点击更新时,数据库中没有任何更新。

用户控制器:

  public function edit($id)
        {
            $user = User::find($id);
            return view('user.update')->with('userToUpdate',$user);
        }

        /**
         * Update the specified resource in storage.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  int  $id
         * @return \Illuminate\Http\Response
         */
        public function update(Request $request, $id)
        {
            $user = User::find($id);
            $user->name = Input::get('name');
            $user->email = Input::get('email');
            $user->password = bcrypt(Input::get('password'));
            $user->save();      
            return Redirect::to('/users')->with('message', 'User Updated');
        }

更新视图:

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Update</div>
                <div class="panel-body">
                    <form class="form-horizontal" role="form" method="PUT" action="{{ url('/users') }}">
                        {!! csrf_field() !!}

                        <div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
                            <label class="col-md-4 control-label">Name</label>

                            <div class="col-md-6">
                                <input type="text" class="form-control" name="name" value="{!! $userToUpdate->name !!}">

                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
                            <label class="col-md-4 control-label">E-Mail Address</label>

                            <div class="col-md-6">
                                <input type="email" class="form-control" name="email" value="{!! $userToUpdate->email !!}">
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}">
                            <label class="col-md-4 control-label">Password</label>

                            <div class="col-md-6">
                                <input type="password" class="form-control" name="password" value="{!! $userToUpdate->password !!}">
                            </div>
                        </div>


                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    <i class="fa fa-btn fa-user"></i>Update
                                </button>
                            </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

用户模型:

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

路线:

Route::group(['middleware' => 'web'], function () {
    Route::get('/', function () {
        return view('welcome');
    });

    Route::auth();

    Route::get('/home', 'HomeController@index');
    Route::get('/register', function(){
        return view('auth.register');
    })->middleware('isAdmin');
    Route::resource('/users', 'UsersController');

});

【问题讨论】:

  • 在 HTML 表单中使用 PUT 方法是非标准的。当我尝试它时,我让它表现得像一个 GET 表单。
  • @apokryfos PUT 用于更新,我还能添加什么?

标签: php database laravel laravel-5 laravel-5.2


【解决方案1】:

来自 laravel 文档:

https://laravel.com/docs/5.0/routing#method-spoofing

HTML 表单不支持 PUT、PATCH 或 DELETE 操作。因此,在定义从 HTML 表单调用的 PUT、PATCH 或 DELETE 路由时,您需要在表单中添加一个隐藏的 _method 字段。

但是 Route::resource 指定更新需要使用 PUT 方法。因此,您的表单需要:

<form class="form-horizontal" role="form" method="POST" action="{{ url('/users', $userToUpdate->id) }}">
     {!! csrf_field() !!}
     <input type="hidden" name="_method" value="PUT">

【讨论】:

  • 工作起来就像一个魅力,但解释这一点,在表单标签中你使用了 method = POST,然后在隐藏字段 Method = PUT 我没有得到那个?
  • 还有一件事,正如@Harry Loyd 提到的,动作应该是 action="{{ url('/users', $userToUpdate->id) }} 即传递 ID 和 action 否则它不行我试过了!
  • HTML 表单仅支持 GET 和 POST。 Laravel 允许您使用隐藏字段 _method 来模拟其余的 HTTP“动词”(PUT、PATCH、DELETE)(请查看 laravel.com/docs/5.0/controllers#restful-resource-controllers 了解为什么需要这样做)。
【解决方案2】:

是因为您在发送表单时没有传递用户ID吗?尝试将表单操作从{{ url('/users') }} 编辑为{{ url('/users', $userToUpdate-&gt;id) }}

【讨论】:

  • 仍然没有更新数据库中的数据@Harry Loyd
  • 在 var_dump($user) 上,当我点击更新 @Harry Loyd 时它什么也不显示
  • 如果在更新函数中使用 var_dump($id) 会发生什么?它仍然设置为 null 吗?
  • OK 不完全确定它是什么。使用 var_dump() 即使未设置变量,您仍然应该看到打印出 null 。您可以检查浏览器中的元素并仔细检查表单操作 URL 是否正确吗?
猜你喜欢
  • 1970-01-01
  • 2016-09-25
  • 2017-08-06
  • 2020-03-30
  • 2016-12-12
  • 1970-01-01
  • 2016-11-18
  • 2018-04-11
  • 2018-04-19
相关资源
最近更新 更多