fob*_*bus 2 orm laravel eloquent
我有一个表,将标签名称存储为“标签”
标签
id->Integer(unique)
title->String;
url->string;(unique)
Run Code Online (Sandbox Code Playgroud)
我还有一张表来存储名为 place 的地方
地方
id->Integer(unique)
title->string
latitude->string
longtitue->string
Run Code Online (Sandbox Code Playgroud)
一个地方可能有很多标签,这是我的 place_tag 表
地点标签
id->Integer(unique)
tag_id->Integer
place_id->Integer
Run Code Online (Sandbox Code Playgroud)
当我尝试更新地点时,我需要这样做
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');
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
$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);
Run Code Online (Sandbox Code Playgroud)
我假设一个标签可以设置为多个位置(n:n 关系),所以首先你基本上找到标签,如果它不存在你创建它然后使用sync你同步关系表(必要时从数据透视表插入或删除数据)
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |