【问题标题】:How to update data in laravellaravel如何更新数据
【发布时间】:2019-01-13 19:25:17
【问题描述】:

我在使用 laravel 更新数据库中的记录时遇到问题。我希望用户能够通过填写表格来更改其姓名/电子邮件地址。但是,这不起作用。它给了我这个错误“从空值创建默认对象”,我不知道我做错了什么。我希望有人可以帮助我解决这个问题。

我的控制器中的更新功能:

public function update(Request $request, $id)
{
    $user = UserModel::find($id);

    $name->name = $request->input('name');
    $email->email = $request->input('email');

    $user->save();

    return view('edit');
}

我认为我的表单:

 <form id="form" action="{{ action('AccountController@update') }}">
    @csrf
        <div class="form-group">
            <h5>Edit Acount info</h5>
            <label for="">Name:</label><input name="name" type="text" value="{{ Auth::user()->name }}" class="form-control" id="edit_name">
            <label for="">E-mail:</label><input name="email" type="text" value="{{ Auth::user()->email }}" class="form-control" id="edit_email">
            <button type="submit" class="btn btn-primary"><a id="btn_link">Edit</a></button>
        </div>
 </form>

我的模特:

 class UserModel extends Model
 {
   protected $table = 'users';
   protected $primarykey = 'id';
   protected $fillable = ['name', 'email'];
 }   

【问题讨论】:

  • 我将答案更改为还包括将您的请求转换为 POST 的更改:)

标签: laravel eloquent frameworks


【解决方案1】:

您正在尝试为对象nameemail 赋值。两者都不存在。你可能打算这样做:

public function update(Request $request)
{
    auth()->user()->update([
        'name'  => $request->input('name'),
        'email' => $request->input('email')
    ]);

    return view('edit');
}

编辑:诚然,看到使用GET 完成更新操作很奇怪。我会将其更改为POST。还更改了操作以使用命名路由。如果您愿意,可以保留您的操作助手。

<form id="form" action="{{ route('account.update') }}" method="POST">
    @csrf
        <div class="form-group">
            <h5>Edit Account info</h5>
            <label for="">Name:</label><input name="name" type="text" value="{{ auth()->user()->name }}" class="form-control" id="edit_name">
            <label for="">E-mail:</label><input name="email" type="text" value="{{ auth()->user()->email }}" class="form-control" id="edit_email">
            <button type="submit" class="btn btn-primary"><a id="btn_link">Edit</a></button>
        </div>
 </form>

确保您的路线也更改为POST,如果它还没有的话。

Route::post('account/update', 'AccountController@update')->name('account.update');

不确定以上是否是您的实际路线,但您可以轻松更改:)

【讨论】:

  • @Mozamil 我尝试了您为我提供的代码。我还将当前路线更改为发布路线。它仍然无法正常工作,它一直告诉我这些值为空,我不知道为什么名称和电子邮件是空值。
  • 你能在控制器里dd(auth()-&gt;user())吗?
  • 对不起,我的意思是dd(auth()-&gt;user-&gt;name, auth()-&gt;user()-&gt;email));
  • 我试过 dd(auth()->user->name, auth()->user()->email));它正在返回正确的数据。
  • 对控制器代码和刀片文件进行了一些更新,包括路由。我简化了一点。它应该可以工作。
【解决方案2】:

看看你的错误,它应该可以工作:

public function update(Request $request, $id)
{
    $user = UserModel::find($id);

    $user->name = $request->input('name');
    $user->email = $request->input('email');

    $user->save();

    return view('edit');
}

这也是一种方式:

public function update(Request $request, $id)
{
    $user = UserModel::find($id);

    $user->update([
        'name' => $request->input('name'),
        'email' => $request->input('email')
    ]);

    return view('edit');
}

【讨论】:

  • 我尝试使用最后一种方法,但它仍然给我错误。这次它告诉我这个'SQLSTATE [23000]:完整性约束违规:1048 列'名称'不能为空'。但我不明白为什么名称为空。
  • dd($request->alll()) - 你在请求中看到了什么?
  • 当我做 dd($request->all());我在请求中没有看到任何数据。
  • 值得一提的是,您的更新是 GET 请求。
  • @Mozammil 在哪里可以将其更改为 POST?
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 2018-02-26
  • 2020-05-20
  • 2017-11-15
  • 2014-08-19
  • 2021-10-07
相关资源
最近更新 更多