我有以下功能:
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);
答案 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 : [])