Ответ 1
Я копал в коде Laravel, и я не нашел хорошего способа указать заполняемый или защищенный параметр для класса Pivot, даже если это подкласс модели.
Это означает, что вы приближаетесь уже довольно хорошо.
У меня есть следующие таблицы:
document: id, name;
author: id, name, job_title;
document_author: document_id, author_id, position
Я передаю массив следующей структуры:
$attributes = [name, job_title, position];
Я пытаюсь создать модель автора и прикрепить ее к документу:
$author = \Author::create($attributes);
\Document::find($id)->authors()->save($author,$attributes);
Затем я получаю QueryException
, потому что laravel пытается массово присваивать атрибуты сводной таблице, в то время как он должен пропускать только поле position
.
Единственное решение, которое я получил, это фильтр-массив, например:
$author = \Author::create($attributes);
$pivotAttributes = array_only($attributes, ['position'])
\Document::find($id)->authors()->save($author,$pivotAttributes);
Есть ли лучший способ, чтобы определить, какие столбцы сводной таблицы являются заполняемыми, лучше где-то в модели или в ее отношении?
Я копал в коде Laravel, и я не нашел хорошего способа указать заполняемый или защищенный параметр для класса Pivot, даже если это подкласс модели.
Это означает, что вы приближаетесь уже довольно хорошо.
Попробуйте
$author = \Author::create($attributes);
$author->documents()->attach($id,["position"=>$request->get('position')]);
Показать документ http://laravel.com/docs/5.0/eloquent#inserting-related-models