laravel - 无法存储带有问题的标签:给定字符串
问题描述
嗨,我是 laravel 初学者,并且有一个带有 laravel 8 的 API
我想在我的项目中存储带有问题的标签,并且问题和标签之间的关系是多对多多态的(因为我有另一个表并且它们也有标签字段)
在我QuestionController()
想存储问题和标签时,出现此错误:
"Argument 1 passed to Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany::save() must be an instance of Illuminate\\Database\\Eloquent\\Model, string given
当我使用save
而不是saveMany()
给出此错误时:
"message": "Argument 1 passed to Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany::save() must be an instance of Illuminate\\Database\\Eloquent\\Model, array given
我也用过sync()
,但标签没有存储在数据库中
我和邮递员一起尝过
块引用
这method
是这样的:
public function store(StoreQuestionRequest $request)
{
$validatedData = $request->all();
////Because there is no need storage images and question codes
$question = Question::create($validatedData); //store question
//store tags
$tag = new Tag();
$tags = explode(",", $request->tag);//separate tags
$tag['tag'] = $tags;
$question->tags()->saveMany($tags);
return response()->json([
'success'=>true,
'message'=> 'successfully',
'data'=>$question
]);
}
因此,如果您需要了解relations
,这些是我的模型:
Question
:
public function tags(){
return $this->morphToMany(Tag::class, 'taggable');
}
Tag
:
public function questions(){
return $this->morphedByMany(Question::class, 'taggable');
}
感谢您的帮助和关注,我真的需要解决这个问题
解决方案
尝试attach()
但您需要传递标签的 ID,而不是标签本身。
如果用户只是在标签之间进行选择,您可以将他选择的标签的 id 与请求中的问题一起发送为数组,然后将其传递给附加方法
$question->tags()->attach($request->tagsIds);
如果用户创建标签,您可以收集新的 id 并将它们传递给附件,如下所示
$tags = explode(",", $request->tag);//separate tags
$tagsIds = [];
foreach($tags as $tag)
{
array_push($tagsIds,Tag::create(['theTagColumn ex: name'=>$tag])->id);
}
$question->tags()->attach($tagsIds);
希望这对你有用
推荐阅读
- python - python / pandas在给定起点的情况下从数据框中删除行的方法
- postgresql - “DROP DATABASE postgres”之后会发生什么
- android - 蓝牙 le gatt 客户端和服务器
- r - 获取 as.Date 仅显示年份而不是自动包括今天的日期
- reactjs - Redux 状态管理
- sonarqube - Sonarqube DB 复制工具 - 从哪里获得 jar?
- javascript - 展开全部/折叠所有按钮js
- android - How can I create a table in SQLite?
- asp.net-mvc - 更改实体框架的服务器(Dev、UAT、Prod)
- javascript - 从 JSON 对象中动态删除属性