2017-11-18 10 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'를 사용하여 수십만 개의 laravel 배포가 가능할 것입니다. 여러분이 묘사하고있는 버그를 발견 한 첫 번째 사람이라면 _ 놀랍습니다. 당신이 잘못 사용하고있을 가능성이 더 큽니다. 이 문제를 재현하고 디버깅 방법을 알려주십시오. –

답변

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()); 

하거나 추천하기 추천도 하나를 : 어떻게 당신이 디버깅

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"); 
    } 
} 

입니다 일 전자 방식, 두 번 확인, 요청에 따라 올 수있는 모든 데이터가 예상됩니다.

+0

고마워, 내가 알고있어,하지만 왜 때로는이 오류가 발생하는지 알고 싶습니다 그리고 다른 번에 – Vilius

0

아니요. sometimes this error happens, $fillable은 업데이트가 아닌 생성/삽입과 함께 작동하므로 업데이트 할 때 _token 열을 포함하십시오.

+0

fillable은'update'와도 관련이 있습니다 (업데이트는'fill'와'save')하지만 on 모델 작성자가 아닌 기존 모델 인스턴스에서 호출 될 때. – lagbox