If I have a many-to-many relationship it's super easy to update the relationship with its sync method.

但我会用什么来同步一对多的关系呢?

  • table posts: id, name
  • links:id, name, post_id

Here, each Post can have multiple Links.

I'd like to synchronize the links associated with a specific post in the database, against an inputted collection of links (for example, from a CRUD form where I can add, remove, and modify links).

应该删除数据库中输入集合中不存在的链接.数据库和我的输入中存在的链接应更新以反映输入,仅存在于我的输入中的链接应作为数据库中的新记录添加.

To summarize the desired behavior:

  • inputArray=true/db=false--创建
  • inputArray = false / db = true ---DELETE
  • inputArray=true/db=true-更新

推荐答案

不幸的是,一对多关系没有sync种方法.你自己做这件事很简单.至少如果您没有任何引用links的外键的话.因为这样您就可以简单地删除行并重新插入所有行.

$links = array(
    new Link(),
    new Link()
);

$post->links()->delete();
$post->links()->saveMany($links);

If you really need to update existing one (for whatever reason) you need to do exactly what you described in your question.

Laravel相关问答推荐

当未通过验证的字段是值数组时,Laravel$validator->;validator()方法不会引发异常

在Laravel中URL中添加保护ID

LARVAL SAVE 中的关系有

导出所有客户端不起作用,文件保存时没有名称和扩展名

如何为 CMP 横幅安装谷歌同意脚本?

laravel Eloquent 模型更新事件未触发

我在哪里放置事件侦听器和处理程序?

Laravel + SQLite = SQLSTATE[HY000]一般错误:8次try 写入只读数据库

限制 Blade foreach 循环中的结果

用 laravel 表单确认删除?

Laravel 5.5 类型错误:传递给 Illuminate\Auth\EloquentUserProvider::validateCredentials() 的参数 1 必须是实例

在 Laravel 5.4 中将中间件应用于除 `setup/*` 之外的所有路由

升级到 Laravel 5.2 会使所有会话失效

在 Laravel 中生成随机数

Laravel 迁移命名约定

laravel 5.1 在没有 VM 重启的情况下看不到作业(job)文件的更改

Laravel 5.4 Vue.JS 无法挂载组件:未定义模板或渲染函数

Laravel 分页漂亮的 URL

如何在laravel中 for each 用户生成唯一的随机值并将其添加到数据库中

Laravel:Redis 无法建立连接:[tcp://127.0.0.1:6379]