我的问题可能很简单,但我找不到合适的答案,而且我不知道我做的是否是正确的做法。
我有一篇文章和一个带有数据透视表的标签表。
我尝试做的是:
我的代码是:
$tags = [];
foreach ($request->input('tags') as $key => $value) ;
$tag = Tag::firstOrCreate(['nom' => $value]);
$article->tags()->sync($tag);
}
但它只同步最后一个标签。也许有比foreach循环更好的方法吗?
感谢您的帮助。
答案 0 :(得分:1)
sync方法接受要放在中间表上的ID数组。将从中间表中删除不在给定数组中的任何ID。因此,在此操作完成后,只有给定数组中的ID将存在于中间表中。
由于您在foreach
循环中执行此操作,因此它将在循环的每次迭代中删除除相应标记之外的所有值。您希望在最后提供一系列标记和同步。
foreach ($request->input('tags') as $key => $value) ;
$tags[] = Tag::firstOrCreate(['nom' => $value])->id;
}
$article->tags()->sync($tags);