【问题标题】:Data not storing in the DB [Laravel 5.5]数据未存储在数据库中 [Laravel 5.5]
【发布时间】:2017-10-31 13:45:28
【问题描述】:

我正在使用 Laravel 5.5。我想将我的数据存储在数据库中,但是当我尝试这样做时 - 什么也没有发生。这是我的 MarketController 代码

public function store(Request $request)
{


    $this->validate($request, [
        'name' => 'required|unique:markets|max:255',
        'website' => 'required',
        'city' => 'required',
    ]);
    Market::create($request->all());
    return redirect('markets'); 
}

我的 save.blade.php 代码

<!DOCTYPE html>
 <html>
 <head>
   <title>Create Market</title>
 </head>
 <body>
  @extends('layouts.app')
  @section('main')
  <form action="{{ route('markets.store') }}" method="post">
    {{ csrf_field() }}
    <input type="hidden" name="_token" value="DaBSErIRWPPI">
    <label for="name">Name</label>
    <input type="text" name="name" id="name">
    <label for="city">Location</label>
    <input type="text" name="city" id="city">
    <label for="website">Market's website</label>
    <input type="text" name="website" id="website">
    <button type="submit"><a href="{{route('markets.store')}}">Add Market</a>
</button>
</form>
</form>

这里是 index.blade.php 代码

<h1><a href="{{ route('markets.create', $market) }}">Add Market</a></h1>

什么都没有发生。请帮忙。谢谢你!

【问题讨论】:

  • 有什么错误吗?提交后显示的
  • @Rits,不,什么都没有
  • 必须允许Model中的必填字段为,protected $fillable = ['column_name', 'column_name', 'column_name']
  • 由于您直接添加 $request->all() laravel 不会添加,除非您在模型中按照上述声明进行操作
  • @DanielKiz 在您重定向的控制器操作中执行任何操作之前。只需 echo & exit 并在第一行检查您是否收到对该操作的请求

标签: php html mysql laravel laravel-5


【解决方案1】:

您的路线应该显示为我的示例,因为我不知道您的路线页面标题:

Route::post('store', 'MarketController@store')->name('store');

实际上你应该运行:php artisan make:request StoreRequest

在 StorageRequest.php 中将 authorizereturn false; 更改为 return true;,然后添加规则:

return [
    'name' => 'required|max:255',
    'website' => 'required',
    'city' => 'required'
]

然后可以简化您的控制器:

public function store(StoreRequest $storeRequest)
{
    $form = $storeRequest->all();

    Market::create([
        'name' => $form['name'],
        'website' => $form['website'],
        'city' => $form['city']
    ]);

    return redirect('markets');

}

您的表格有点拥挤,这里有一个细分版本:

<form action="{{ route('store') }}" method="post">
    {{ csrf_field() }}
    <label for="name">Name</label>
    <input type="text" name="name" id="name">

    <label for="city">Location</label>
    <input type="text" name="city" id="city">

    <label for="website">Market's website</label>
    <input type="text" name="website" id="website">

    <input type="submit" value="Submit">
</form>

更新

您的示例不会将错误返回到表单,因此这里是另一个更新版本:

<form action="{{ route('store') }}" method="post">
    {{ csrf_field() }}
    <label for="name">Name</label>
    <input type="text" name="name" id="name">

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

    <label for="city">Location</label>
    <input type="text" name="city" id="city">

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

    <label for="website">Market's website</label>
    <input type="text" name="website" id="website">

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

    <input type="submit" value="Submit">
</form>

所以现在,如果未填写必填字段,它将返回并在表单上抛出错误,说明未填写哪个输入字段。

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 2019-12-27
    • 2019-11-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多