Laravel 5 - 通过多对多关联更新记录的正确方法?

时间:2016-08-26 12:07:26

标签: php laravel laravel-5

我是Laravel的新手,试图找出通过关联保存数据的正确方法。我使用的是版本5.3

例如:我有出版物属于很多作者

请求的DD:

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

首先,我试图这样做:

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

但得到了#34;未知栏目的作者和#34; 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 个答案:

答案 0 :(得分:1)

更安全,更好的选择是使用

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

    return redirect('/');
}

并在您的出版物类

中设置$fillable属性
class Publication extends Model
{
    protected $fillable = ['name', 'other_field'];
}

此外,如果您验证输入会很好。进一步阅读:Laravel Validation