Laravel多边插入每一边

时间:2018-06-17 05:36:01

标签: php laravel

我的问题可能很简单,但我找不到合适的答案,而且我不知道我做的是否是正确的做法。

我有一篇文章和一个带有数据透视表的标签表。

我尝试做的是:

  • 插入文章
  • 插入标签(如果不存在)
  • 插入关系

我的代码是:

$tags = [];
        foreach ($request->input('tags') as $key => $value) ;
            $tag = Tag::firstOrCreate(['nom' => $value]);
            $article->tags()->sync($tag);
        }

但它只同步最后一个标签。也许有比foreach循环更好的方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

eloquent sync method州:

  

sync方法接受要放在中间表上的ID数组。将从中间表中删除不在给定数组中的任何ID。因此,在此操作完成后,只有给定数组中的ID将存在于中间表中。

由于您在foreach循环中执行此操作,因此它将在循环的每次迭代中删除除相应标记之外的所有值。您希望在最后提供一系列标记和同步。

    foreach ($request->input('tags') as $key => $value) ;
        $tags[] = Tag::firstOrCreate(['nom' => $value])->id;
    }
    $article->tags()->sync($tags);