【问题标题】:Laravel how to add records with create function in controller?Laravel 如何在控制器中使用创建功能添加记录?
【发布时间】:2019-06-24 09:13:04
【问题描述】:

NewsController.php

这是控制器,我使用 create 函数将记录添加到数据库,但是当我添加所有记录时,所有记录都是空的

public function insertNews() {
    $attribute = [
        'Ntitle'   => 'News Title',
        'Ndesc'    => 'News Description',
        'Naddedby' => 'News Added By',
        'Ncontent' => 'News Content',
        'Nstatus'  => 'News Status'
    ];
    $data = $this->validate(request(), [ 
        'Ntitle'   => 'required',
        'Ndesc'    => 'required',
        'Naddedby' => 'required',
        'Ncontent' => 'required',
        'Nstatus'  => 'required'
    ], [], $attribute);
    News::create($data);
    return redirect('all/news');
}

我使用 dd() 来显示记录,它将与令牌和所有其他值一起显示

dd(request()->all()) 

新闻.php 这是模型文件

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

    class News extends Model
    {
        use SoftDeletes;
        protected $primaryKey = 'News_ID';
        protected $date       = ['delete_at'];
        protected $fillable = ['News_Title', 'News_Descrption', 'News_Content', 'Added_By', 'News_Status'];
    }

web.php 这是网络文件(路由)

Route::post('insert/news', 'NewsController@insertNews');

news.blade.php

这是包含我发送给控制器的表单的刀片文件

<form action="{{ url('insert/news') }}" method="POST">
    {{ csrf_field() }}
    <input type="text" name="Ntitle" value="{{ old('Ntitle') }}" placeholder="News Title"><br />
    <input type="text" name="Ndesc" value="{{ old('Ndesc') }}" placeholder="News Descrption"><br />
    <input type="number" name="Naddedby" value="{{ old('Naddedby') }}" placeholder="News Added By"><br />
    <textarea name="Ncontent" value="{{ old('Ncontent') }}" placeholder="News Content"></textarea><br />
    <select name="Nstatus">
        <option value="Active" {{ old('Nstatus') == 'Active' ? 'selected' : '' }}>Active</option>
        <option value="Pending" {{ old('Nstatus') == 'Pending' ? 'selected' : '' }}>Pending</option>
        <option value="Disabled" {{ old('Nstatus') == 'Disabled' ? 'selected' : '' }}>Disabled</option>
    </select><br />
    <input type="submit" value="Add News">
</form>

enter image description here

【问题讨论】:

    标签: php mysql laravel web-development-server


    【解决方案1】:

    您的代码无法正常工作的原因有很多:

    1. 在您的情况下,您错误地将 $data 等同于验证对象。您应该在 create 函数中使用 $attribute(数据的键值数组,而不是验证对象)而不是 $data。
    2. 其次,在创建数据的数组中传递的键应该与您用于数据插入的表的字段名称完全相同。我看到您的代码显示 Ntitle、Ndesc 等用于验证并在 $attribute 数组中,而可填充受保护的 $fillable 具有不同的字段名称!因此,请在您传递的数据和模型中的 $fillable 中使用正确的字段名称。我正在编写以下代码,假设 Ntitle、Ndesc、Naddby、Ncontent、Nstatus 是表的字段名称。请参考以下代码!

    public function insertNews() {
                    $attribute = [
                        'Ntitle'   => 'News Title',
                        'Ndesc'    => 'News Description',
                        'Naddedby' => 'News Added By',
                        'Ncontent' => 'News Content',
                        'Nstatus'  => 'News Status'
                    ];
                    $this->validate(request(), [ 
                        'Ntitle'   => 'required',
                        'Ndesc'    => 'required',
                        'Naddedby' => 'required',
                        'Ncontent' => 'required',
                        'Nstatus'  => 'required'
                    ], [], $attribute);
                    News::create($attribute);
                    return redirect('all/news');
                }
    

    确保您已将所有字段添加到受保护的 $fillable = [];在你的模型中是这样的:

    class News extends Model {
    
        protected $fillable = [
          'Ntitle', 'Ndesc', 'Naddedby', 'Ncontent', 'Nstatus'
        ];
    

    【讨论】:

    • 很高兴它有帮助:)
    【解决方案2】:

    您需要将值传递给 create() 方法。

    //Passing the request to create method
        News::create($request->all());
        return redirect('all/news');
    

    如果您在 News 模型的 $fillable 变量中添加了输入名称,它现在将存储。

    //News.php (Model)
    protected $fillable = ['Ntitle', 'Ndesc', 'Naddedby', 'Ncontent', 'Nstatus'];
    

    我更喜欢使用

    //News.php (Model)
    protected $guarded = [];
    

    【讨论】:

      【解决方案3】:

      我可以要你的网络路线吗? 所以我可以告诉你哪里错了,

      我认为你的路线应该是

      Route::namespace('your_Controller_Foldername')->group(function () {
      
       Route::resource('insert/news', 'NewsController');
      
       });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-09
        • 1970-01-01
        • 2015-01-30
        • 1970-01-01
        • 2012-07-04
        • 2016-09-03
        • 2015-05-10
        相关资源
        最近更新 更多