未找到Laravel列:1054'字段列表'中的未知列'_token'(SQL:update`tutorials` set`_token` =

时间:2015-06-10 07:18:08

标签: php laravel

如果我更新我的表单模型绑定,我收到上述错误。 我已经将所有数据库字段都放到了可填写字段而没有任何影响我仍然收到错误。

这是我的编辑视图的表格

{!! Form::model($tutorial, ['route' => ['tutorials.update', $tutorial->id], 'method' => 'PUT' ]) !!}

我的模型中的可填写/保护字段

 /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable =
    [
        'title',
        'subtitle',
        'content',
        'meta_desc',
        'meta_title',
        'seo_title',
        'tags',
        'slug',
        'updated_at',
        'added_on'
    ];

    protected $guarded = ['id', '_token'];

这是我的TutorialController

public function update(Tutorial $tutorial)
    {

        $input = Input::except('_method'); // Request::all() is not working
        $tutorial->update($input);

        return Redirect::route('tutorials.index')->withSuccess(
            'success.'
        );
    }

最后但并非最不重要的是我的路线

 Route::get('edit/{id}', [
        'as' => 'tutorials.edit',
        'uses' => 'TutorialsController@edit'
    ]);

    Route::put('edit/{id}', [
        'as' => 'tutorials.update',
        'uses' => 'TutorialsController@update'
    ]);

3 个答案:

答案 0 :(得分:3)

Laravel在您的表单中添加了名为_token的CSRF保护令牌。您还需要从输入中删除它,否则Laravel认为它是您要插入的内容的一部分。

$input = Input::except('_method', '_token');

然后,您应该删除$guarded数组,因为您应该 一个$fillable - 而不是两者。

您收到错误的原因可能是因为您将_token字段添加到$guarded数组中 - 现在,Laravel认为它是您模型上的一列,即使它不是。< / p>

答案 1 :(得分:0)

在这种情况下,我喜欢使用

        $inputs = Request::only('field1','field2');    

为你

$inputs = Request::only('title',
    'subtitle',
    'content',
    'meta_desc',
    'meta_title',
    'seo_title',
    'tags',
    'slug',
    'updated_at',
    'added_on');

答案 2 :(得分:0)

首先,您将变量分配给Input :: all()。输入all是一个数组。然后,您取消设置Key _token并传递分配的变量以进行更新。 例如

$input = Input::all();
unset($input['_token']);
Client::where('id', $id)->update($input);  

对不起,我的英语。