gpt4 book ai didi

Laravel - CreateMany 如果不存在

转载 作者:行者123 更新时间:2023-12-02 15:30:51 25 4
gpt4 key购买 nike

我有一个表将标签名称存储为“tag”

标签

id->Integer(unique)
title->String;
url->string;(unique)

我还有一张表来存储名为 place 的地方

地点

id->Integer(unique)
title->string
latitude->string
longtitue->string

一个地方可能有很多标签,这是我的 place_tag 表

place_tag

id->Integer(unique)
tag_id->Integer
place_id->Integer

当我尝试更新地点时我需要这样做

1- 检查所有张贴的标签。2-如果之前没有创建,将它们添加到“标签”数据库3- 写出标签和地点的关系

但我认为 Laravels ORM 可以处理它,我四处走动但找不到好的解决方案。

请查看我的更新程序,我做错了什么。

public function update($id)
{
$place=Place::findOrFail($id);
$place->fill(Input::all());
$place->save();

$tags=explode(',',Input::get('tags'));

$tags_data=array();
foreach($tags as $tag) {
$tags_data[]=new Tag(array('title'=>$tag,'url'=>$tag));
}

$place->tags()->detach();
$place->tags()->saveMany($tags_data);

return Redirect::to('admin/places');
}

最佳答案

你可以这样做:

$tagIds = [];

foreach ($tags as $tag) {
$tag = trim($tag);
if ($tag == '') {
continue;
}
$fTag = Tag::firstOrCreate( [ 'title' => $tag, 'url' => $tag ] );

$tagIds[] = $fTag->id;
}

$place->tags()->sync($tagIds);

我假设一个 Tag 可以设置到多个 Places(n:n 关系),所以首先你基本上找到标签,如果它不存在你创建它然后使用 sync 你同步关系表(必要时从数据透视表插入或删除数据)

关于Laravel - CreateMany 如果不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26363734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com