2017-11-18 25 views
1

Laravelのアプリでは奇妙な動作が発生しています。Laravel 'フィールドリスト'の '_token'列が不明です

私は実行時にはそれが罰金を通過

Users::where("id",$request->input("id"))->update($request->input()); 

を言うことができます。他の例では、私はそれだけで$fillableパラメータに設定されているものを読み込んで、それ以外のことは$request->input()からすべてを取るので、時々

Unknown column '_token' in 'field list' 

を取得します。私は異なったモデルを比較し続け、違いは見られない。私は$request->only([])メソッドを使用して回避することができますが、他の誰かがこの問題を抱えているのでしょうか、それとも背後にある理由を知っていますか?

編集

これはこれはこれは、あなたがすることで$request->except('_token');を使用することができLaravel 5.3.31

+0

?あなたがそこから得たものを知るように、少なくとも要求データを記録します。 'Model-> update'を使って何十万人ものラーベル展開が行われていますが、あなたが描いているものを最初に見つけたならば、本当に驚いています。あなたはそれを間違って使用している可能性が高いです。これを再現し、デバッグ方法を教えてください。 –

答えて

4

あなたが今やっていることは本当に危険です。実際には、$fillableプロパティに関係なく、どのフィールドも更新することができます。あなたは次のように更新しているので、これは次のとおりです。

Users::where("id",$request->input("id"))->update($request->input()); 

とき、あなたが直接データベースと雄弁なものに更新を行っているという事実に、この実行されたクエリは次のようになりますので、使用されていないようアップデートを行っています。誰もがこの表の既存の列を送信した場合、あなたは、誰もがあなたがしたくない列を変更したくないので

UPDATE users SET a=1, b=2 WHERE id = 5 

ので、彼らは非常に非常に危険である何か更新されます。

しかし、あなたはこのような何か場合:上記の場合

$user = Users::where("id",$request->input("id"))->firstOrFail(); 
$user->update($request->input()); 

を雄弁には(最初のあなたは、データベース内のレコードを検索し、それを雄弁モデルだと、あなたは、この雄弁モデルを更新してみてください)使用されているので、今ではです$fillableにあるフィールドのみを更新することができます( 'fillable-way'を使用しているものの、モデルを見ていると仮定します)。だから今、何が要求に送信されても​​、$fillableのフィールドだけが更新されます。

は明らかに上記ビット短いのように書くことができます。

$user = Users::findOrFail($request->input("id")); 
$user->update($request->all()); 

またはこのようなようにも1つの方法:あなたがこれをデバッグしている

Users::findOrFail($request->input("id"))->update($request->all()); 
+0

清算をありがとう。 – Vilius

1

上で実行されている

/** 
    * Update Booking Reques 
    * @param Request $request 
    */ 
    public function update(Request $request){ 
     /** 
     * Validate 
     */ 
     $this->validate($request,array(
      "id" => "required" 
     )); 
     /** 
     * Update 
     */ 
     BookingRequests::where("id",$request->input("id"))->update($request->input()); 
     /** 
     * Return 
     */ 
     return redirect()->back()->with("success","Booking updated"); 
    } 

私のコントローラである私のmodel.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class BookingRequests extends Model 
{ 
    // 
    protected $fillable = array(
     "account_id", 
     "quote_id", 
     "booking_id", 
     "website_id", 
     "color", 
     "custom_group_name", 
     "is_confirmed", 
     "ready_to_issue", 
     "created_by", 
    ); 


    /** 
    * Return Quote 
    * @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
    */ 
    public function Quote(){ 
     return $this->belongsTo('App\Quotes',"quote_id","id"); 
    } 
} 

ですthすべてのデータが要求によって来ることが予想されることを確認します。

+0

ありがとう、私はこれを知っているが、なぜ時々このエラーが発生し、それ以外のときには – Vilius

0

sometimes this error happens$fillableは、更新ではない作成/挿入による質量割り当てでのみ機能するため、更新すると列_tokenが含まれます。

+0

fillableは 'update'と同様に(更新は' fill'と 'save')ビルダーではなく既存のモデルインスタンスで呼び出されたとき。 – lagbox