Laravel 5.2 - 空数组不工作时同步?

时间:2017-06-28 18:59:23

标签: php laravel-5.2 pivot-table

我有以下功能:

private function syncTags(Profile $profile, array $tags)
{
    $profile->tags()->sync($tags);
}

我称之为:

$this->syncTags($profile, $request->input('tags'));

但是它引发了错误:

Argument 2 passed to syncTags() must be of the type array, null given

当我没有选择任何标签时会发生这种情况。标签是用户可以选中/取消选中的复选框列表。我该如何解决?

我尝试了以下内容,但没有任何区别:

$profile->tags()->sync((array) $tags);

2 个答案:

答案 0 :(得分:1)

如果您有时会在没有任何标签的情况下调用syncTags(),您可以通过提供默认值使第二个参数成为可选项:

private function syncTags(Profile $profile, array $tags = [])

这样你就可以做到这两点:

$obj->syncTags($profile, $tags);

而且:

$obj->syncTags($profile);

虽然我不太确定后者的意义是什么,因为你什么都没有同步。 (如果没有提供特定标签,那么该方法可能会同步所有内容。)

答案 1 :(得分:0)

如果您可以使用集合或请求实例,只需使用

$profile->tags()->sync($request->get('tags', []))

否则这样做

$profile->tags()->sync(($tags) ? $tags : [])