2016-08-26 2 views
0

Laravel을 처음 사용하여 연관성있는 데이터를 저장하는 적절한 방법을 찾아 내려고했습니다. 나는 예를 들어 버전 5.3Laravel 5 - 다 대다 연관으로 레코드를 업데이트하는 올바른 방법은 무엇입니까?

을 사용하고 있습니다 : 나는이 작업을 수행하려고했습니다

array:4 [▼ 
    "_token" => "something" 
    "_method" => "PATCH" 
    "name" => "Something" 
    "authors" => array:2 [▼ 
     0 => "780" 
     1 => "840" 
    ] 
] 

첫째 :

내가 저자 요청

DD를 belongsToMany 간행물

public function update(Request $request, Publication $publication) 
{ 
    $publication->update($request->all()); 
} 

"알 수없는 열 작성자"SQL 오류가 발생했습니다.

public function update(Request $request, Publication $publication) 
{ 
    $publication->update($request->except('authors')); 
    $publication->authors()->sync($request->input('authors')); 

    return redirect('/'); 
} 

예상대로 작동이 시간 :

나는 다른 접근 방식을 시도했습니다. 내 질문은 : 나는 그것을 올바르게하고 있는가? 아니면 더 좋고/더 쉬운 방법이 있습니까? 명시적인 "조각"이나 요청없이이 업데이트를 수행 할 수 있습니까? 당신이 당신의 입력의 유효성을 검사하는 경우 ($request->except('authors'))

답변

1

안전하고 더 나은 옵션이

public function update(Request $request, Publication $publication) 
{ 
    $publication->fill($request->all())->save(); 
    $publication->authors()->sync($request->input('authors')); 

    return redirect('/'); 
} 

을 사용하여 또한

class Publication extends Model 
{ 
    protected $fillable = ['name', 'other_field']; 
} 

또한 발행물 클래스에 $fillable 속성을 설정하는 것, 그것은 좋은 것입니다. 추가 읽기 : Laravel Validation

+0

SQL 오류 (1054 알 수없는 '필드 목록의 작성자') – user1327

+0

어떻게 '$ fillable'속성을 설정 했습니까? – Skysplit

+0

나는 경비를 사용했습니다. – user1327

관련 문제