2015-04-17 31 views
14

Tôi có bảng sau:Protect bảng pivot từ phân khối sử dụng hùng hồn

document: id, name; 
author: id, name, job_title; 
document_author: document_id, author_id, position 

Tôi đang đi qua một loạt các cấu trúc sau:

$attributes = [name, job_title, position]; 

Tôi đang cố gắng để tạo ra mô hình của tác giả và đính kèm nó vào tài liệu:

$author = \Author::create($attributes); 
\Document::find($id)->authors()->save($author,$attributes); 

Sau đó, tôi nhận được QueryException, vì laravel cố gắng gán hàng loạt các thuộc tính cho bảng tổng hợp, trong khi nó chỉ được chuyển qua trường position.

Giải pháp duy nhất tôi nhận được là để lọc mảng, như vậy:

$author = \Author::create($attributes); 
$pivotAttributes = array_only($attributes, ['position']) 
\Document::find($id)->authors()->save($author,$pivotAttributes); 

Có cách nào tốt hơn, để xác định cột của bảng pivot là fillable, tốt hơn nơi nào đó trong mô hình hoặc trong đó là mối quan hệ?

+0

Nếu '$ attributes' là một Request' (hoặc' Input') Ví dụ ', bạn có thể làm' $ request-> chỉ ('vị trí ');' –

Trả lời

2

Tôi đã đào trong mã Laravel và tôi không tìm thấy cách nào tốt để chỉ định tham số có thể điền và bảo vệ cho lớp Pivot mặc dù nó là lớp con của Mô hình.

Điều này có nghĩa là bạn đã tiếp cận khá tốt.

+0

Tôi hiểu. Nhưng có cách nào để mở rộng Eloquent để làm những việc như: '$ model-> dependsToMany (...) -> fillable (...)'? –

2

Thử

$author = \Author::create($attributes); 
$author->documents()->attach($id,["position"=>$request->get('position')]); 

Hiện Doc http://laravel.com/docs/5.0/eloquent#inserting-related-models

+0

Các op đã làm điều đó –

+0

Vâng. Nó vẫn đòi hỏi phải mô tả các trường bên ngoài mô hình. Chỉ là một quan điểm khác. –

Các vấn đề liên quan