Laravel与firstOrCreate进行多对多同步

时间:2018-07-24 19:21:33

标签: php laravel synchronization

我以前是在多个下拉列表中选择标签的,但我将其更改为一个文本字段,可以在其中手动输入多个标签。然后,我只调用一个firstOrCreate方法,然后就想将它们sync()应用于我的模型,但是我不知道该怎么做。到目前为止,我的代码:

// Here I simply create my new model
$expense = auth()->user()->expenses()->create($request->all());

$tags = [];

// For each entered tag I grab it from the database or I create it
foreach(explode(",", $request->tags) as $tag)
{
    $tags[] = auth()->user()->tags()->firstOrCreate(['name' => $tag]);
}

// Here is what I used to do, but I had an array of tag_ids
$expense->tags()->sync($tags);

不确定下一步要做什么,也是我第一次使用firstOrCreate,因此,关于如何改进上述代码的任何指针也许也将非常受欢迎。但是,当然,我的主要问题是,如何将标签对象同步到我新创建的费用上?

1 个答案:

答案 0 :(得分:0)

实际上非常简单,只需添加->value('id')

$tags[] = auth()->user()->tags()->firstOrCreate(['name' => $tag])->value('id');