【问题标题】:updating forms in Laravel在 Laravel 中更新表单
【发布时间】:2016-09-22 02:42:53
【问题描述】:

我需要帮助更新我在 laravel 中创建的博客文章。 我正在使用 restful 控制器中的更新方法来处理这个问题。 在我看来,表单正在提交给控制器中的正确函数(更新方法),但数据库中的表并未反映更改。

这是我的表格:

@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">Register</div>
            <div class="panel-body">
                <form class="form-horizontal" role="form" method="POST" action="{{ url('/posts/$post_id') }}">
                    {{ csrf_field() }}
                    <input type="hidden" name="_method" value="PUT">
                    <div class="form-group{{ $errors->has('title') ? ' has-error' : '' }}">
                        <label for="title" class="col-md-4 control-label">Title</label>

                        <div class="col-md-6">
                            <input id="title" type="text" class="form-control" name="title" value="{{ !empty(old('title')) ? old('title') : $post->title }}" required autofocus>

                            @if ($errors->has('title'))
                                <span class="help-block">
                                    <strong>{{ $errors->first('title') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>
                    <div class="form-group{{ $errors->has('content') ? ' has-error' : '' }}">
                        <label for="content" class="col-md-4 control-label">Content</label>

                        <div class="col-md-6">
                            <textarea id="content" type="text" class="form-control" name="content"  required rows="15" cols="20">{{ !empty(old('content')) ? old('content') : $post->content }}</textarea>

                            @if ($errors->has('content'))
                                <span class="help-block">
                                    <strong>{{ $errors->first('content') }}</strong>
                                </span>
                            @endif
                        </div>
                    </div>

                    <div class="form-group">
                        <div class="col-md-6 col-md-offset-4">
                            <button type="submit" class="btn btn-primary">
                                Post
                            </button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
</div>
 @endsection

这里是控制器功能

public function update(PostRequest $request, $id)
{
    $title = $request->title;
    $content = $request->content;

    DB::table('posts')->where('id', $id)->update(['title' => $title, 'content' => $content]);

    return 'Post was updated.<br>' . $title . '<br>' . $content;
}

我将 $title 和 $content 变量添加到 return 语句中,只是为了查看它们是否正常并被正确捕获。当我提交表格时,我会收到这里写的返回声明。这至少告诉我表单正确地提交给这个函数,但正如我所说,数据库没有反映更改。有谁知道我在这里做错了什么?不确定它的更新命令是否无法正常工作以使用隐藏的 inout 字段对 PUT 方法进行存根。

提前致谢。

【问题讨论】:

  • 与您的问题无关,但我强烈建议您使用 eloquent 模型。那么您的更新查询将像$post-&gt;update(); 一样简单
  • 虽然看起来是更新查询,但为什么不调试 SQL 查询?

标签: php laravel


【解决方案1】:

update 方法本身返回布尔值,所以检查它是否为真,这意味着查询成功

    public function update(PostRequest $request, $id)
    {
        $title = $request->title;
        $content = $request->content;

        if (DB::table('posts')->where('id', $id)->update(['title' => $title, 'content' => $content])) {
            return 'Post was updated.<br>' . $title . '<br>' . $content;
        } else {
            return 'Failed to update Post';
        }
    }

【讨论】:

  • 所以这些解决方案都不起作用。在尝试调试原因时,我注意到,由于我使用 $post-title 和 $post->content 来填充表单,所以当我将表单提交给更新函数时,旧值与以前相同。所以更新函数没有得到新的值。这可能是问题所在,但我不太确定如何解决?有什么解决办法吗?
【解决方案2】:

在下面试试这个,只有你在验证 PostRequest 文件中的输入

     public function update(PostRequest $request, $id)
    {
       $title = $request->input('title');
       $content = $request->input('content');

      if (DB::table('posts')->where('id', $id)->update(['title' => $title, 'content' => $content])) {
        return 'Post was updated.<br>' . $title . '<br>' . $content;
      } else {
        return 'Failed to update Post';
      }
    }        

或者如果你使用的是 Post 模型,那么就使用它

     public function update(PostRequest $request, $id)
    {
       $title = $request->input('title');
       $content = $request->input('content');

      if (POST::find($id)->update([$title, $content]) {
        return 'Post was updated.<br>' . $title . '<br>' . $content;
      } else {
        return 'Failed to update Post';
      }
    }        

或者如果你使用的是 Post 模型,那么就使用它

     public function update(PostRequest $request, $id)
    {

      if (POST::find($id)->update($request->all()) {
        return 'Post was updated.<br>' . $title . '<br>' . $content;
      } else {
        return 'Failed to update Post';
      }
    }        

我觉得对你有帮助..

【讨论】:

    猜你喜欢
    • 2020-07-09
    • 2021-07-13
    • 1970-01-01
    • 2018-08-10
    • 2018-11-05
    • 2021-06-04
    • 2020-07-24
    • 2020-01-29
    • 1970-01-01
    相关资源
    最近更新 更多