使用雄辩的保护数据透视表免受大规模分配的影响

2022-08-30 23:45:38

我有以下表格:

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

然后我得到,因为laravel试图批量分配数据透视表的属性,而它应该只传递一个字段。QueryExceptionposition

我得到的唯一解决方案是过滤数组,就像这样:

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

有没有更好的方法来定义数据透视表的哪些列是可填充的,在模型的某个地方或它的关系中更好?


答案 1

我正在挖掘Laravel代码,我没有找到任何好的方法,如何为Pivot类指定可填充或受保护的参数,即使它是模型的子类。

这意味着您的方法已经相当不错了。


答案 2

试试看

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

显示文档 http://laravel.com/docs/5.0/eloquent#inserting-related-models


推荐