【问题标题】:Can't update Laravel database (Model, View, Controller)无法更新 Laravel 数据库(模型、视图、控制器)
【发布时间】:2019-04-05 07:00:06
【问题描述】:

我目前正在使用 Laravel。我是新手,仍在努力适应这个平台。我想根据表单输入更新我的数据库,但它不起作用。我已尝试更新模型、视图和控制器,但似乎无法使用输入值更新数据库。

我的看法:

<div class="form-group row">
<label class="col-xs-2 col-form-label">Expiration Date</label>
<div class="col-xs-10">
<input class="form-control" type="date" value="{{ $Document->expires_at }}" name="expires_at" placeholder="Expiration Date">
</div>
</div></form>

            <embed src="{{ asset('storage/'.$Document->url) }}" width="100%" height="100%" />

            <div class="row">
                <div class="col-xs-6">
                    <form action="{{ route('admin.provider.document.update', [$Document->provider->id, $Document->id]) }}" method="POST">
                        {{ csrf_field() }}
                        {{ method_field('PUT') }}
                        <button class="btn btn-block btn-primary" type="submit">Approve</button>
                    </form>
                </div></form>

我的模特:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class ProviderDocument extends Model
{
    protected $table = 'provider_documents';

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'provider_id',
        'document_id',
        'url',
        'unique_id',
        'status',
        'expires_at',

    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [

    ];

    /**
     * The services that belong to the user.
     */
    public function provider()
    {
        return $this->belongsTo('App\Provider');
    }
    /**
     * The services that belong to the user.
     */
    public function document()
    {
        return $this->belongsTo('App\Document');
    }
}

我的控制器:

public function update(Request $request, $provider, $id)
    {
        if(Setting::get('demo_mode', 0) == 1) {
            return back()->with('flash_error', 'Disabled for demo purposes! Please contact us at info@appoets.com');
        }

        try {

            $Document = ProviderDocument::where('provider_id', $provider)
                ->where('id', $id)
                ->firstOrFail();
            $Document->update(['status' => 'ACTIVE']);
            $Document->expires_at = $request['expires_at'];
            $Document->save();
            return redirect()->route('admin.provider.document.index', $provider)->with('flash_success', 'Provider document has been approved.');

        }
        catch (ModelNotFoundException $e) {
            return redirect()->route('admin.provider.document.index', $provider)->with('flash_error', 'Provider not found!');
        }
    }

数据库保持空白,没有错误。如果我直接手动将它放入数据库中,然后转到表单并更新,它就被删除了。请帮忙。

【问题讨论】:

  • dd() 你在Controller中的变量,看看里面是否存储了值。您可以存储空输入。
  • ..您的视图很混乱,我认为是什么导致了错误,您的输入在表单之外,并且您的视图中有多个表单标签。
  • @LimKeanPhang 是对的 - 您的表单没有提交您预期的数据,因为 expires_at 字段在表单之外。所以你的update() 方法没有收到它,只是用相同的数据更新你的数据库记录,所以没有任何变化。
  • 感谢大家的意见。 @LimKeanPhang 虽然我不喜欢你选择的词语,但你是对的。我清理了表格。我将在下面发布结果。哇!你们真的很有天赋和眼光!
  • 它的 laravel 框架,所以代码结构必须很好,这就是框架本身的美??。很高兴它有帮助!干杯!

标签: laravel eloquent


【解决方案1】:

感谢上面@@LimKeanPhang 的输入,下面是最终结果。我不必更改模型或控制器。只是景色。像魅力一样工作。

<form class="form-horizontal" action="{{ route('admin.provider.document.update', [$Document->provider->id, $Document->id]) }}" method="POST">{{csrf_field()}}
<input type="hidden" name="_method" value="PATCH">
    <div class="form-group row">
        <label class="col-xs-2 col-form-label">Expiration Date</label>
            <div class="col-xs-10">
                <input class="form-control" type="date" value="{{ $Document->expires_at }}" name="expires_at" placeholder="Expiration Date">
            </div>
    </div>

            <embed src="{{ asset('storage/'.$Document->url) }}" width="100%" height="100%" />

            <div class="row">
                <div class="col-xs-6">
                        <button class="btn btn-block btn-primary" type="submit">Approve</button>

                </div>
            </div>
</form>

【讨论】:

    【解决方案2】:

    您为什么不按以下方式仅通过 id 获取文档?请尝试以下代码。它应该可以工作。

    控制器更新功能。

    public function update(Request $request, $provider, $id)
    {
        if (Setting::get('demo_mode', 0) == 1) {
            return back()->with('flash_error', 'Disabled for demo purposes! Please contact us at info@appoets.com');
        }
    
        try {
    
            $Document = ProviderDocument::find($id);
            $Document->status = 'ACTIVE';
            $Document->expires_at = $request['expires_at'];
            $Document->save();
    
            return redirect()->route('admin.provider.document.index', $provider)->with('flash_success',
                'Provider document has been approved.');
    
        } catch (ModelNotFoundException $e) {
            return redirect()->route('admin.provider.document.index', $provider)->with('flash_error',
                'Provider not found!');
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 2013-09-24
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多