php - Laravel 多对多插入每一侧
问题描述
我的问题可能很简单,但我没有找到正确的答案,我不知道我所做的是否是正确的方法。
我有一个文章和一个标签表,id 上有一个数据透视表。
我尝试做的是:
- 插入文章
- 如果不存在则插入标签
- 插入关系
我的代码是:
$tags = [];
foreach ($request->input('tags') as $key => $value) ;
$tag = Tag::firstOrCreate(['nom' => $value]);
$article->tags()->sync($tag);
}
但它只同步最后一个标签。也许有比在 foreach 循环上同步更好的方法?
感谢您的帮助。
解决方案
雄辩的同步方法指出:
sync 方法接受要放置在中间表上的 ID 数组。任何不在给定数组中的 ID 都将从中间表中删除。因此,此操作完成后,中间表中将仅存在给定数组中的 ID。
由于您在foreach
循环中执行此操作,因此它将在循环的每次迭代中删除除相应标记之外的所有值。您想改为提供一组标签并在最后同步。
foreach ($request->input('tags') as $key => $value) ;
$tags[] = Tag::firstOrCreate(['nom' => $value])->id;
}
$article->tags()->sync($tags);
推荐阅读
- cuda - 是否可以在 Windows 上运行多个 CUDA 版本?
- flutter - 用于消息和通知的 Flutter 包说 RemoteMessage 类未定义说
- python - 向我的 django-react 博客应用程序添加身份验证的正确方法是什么
- php - 如何接受输入?
- python - 从python中的列表构建嵌套字典
- c# - UWP 是否需要 .NET/.NET Core 才能在客户端上运行?
- python - 在列表的不同字典中添加相同键的值
- c# - 重新格式化字符串数值以使用减号而不是括号来表示负数
- sql - 如何处理 Oracle PL/SQL 中的 into 错误问题?
- html - HTML:强制下载磁盘系统上的文件