douhan1860
2018-07-24 19:21
浏览 82
已采纳

Laravel使用firstOrCreate同步多个

I used to select my tags in a multiple dropdown, but I changed it to a text field where I can manually input multiple tags. I then simply call a firstOrCreate method and I then want to sync() them to my model, but I cannot figure out how to do that. My code so far:

// 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);

Unsure what to do next, also my first time using firstOrCreate, so any pointer on how to improve the above code perhaps would be also very welcome. But ofcourse my main question is, how to sync the tag objects to my newly created expense?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douju5933 2018-07-24 19:37
    已采纳

    It was actually quite simple, just have to add the ->value('id'):

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

相关推荐 更多相似问题