如何在 post_table 和 Tags 表中插入标签?
Posted
技术标签:
【中文标题】如何在 post_table 和 Tags 表中插入标签?【英文标题】:How can i insert tags in post_table and Tags table? 【发布时间】:2021-11-22 22:54:11 【问题描述】:我想在标签表以及帖子创建页面的 post_tag 表中插入标签。当我创建一个新的帖子标签时,标签插入到标签表中,但没有插入到 post_tag 表中。它显示无效的日期时间格式。
SQLSTATE[22007]:无效的日期时间格式:1366 不正确的整数值:'start,tas' 列 anusondhan.post_tag.tag_id 在第 1 行(SQL:插入到 post_tag(post_id,tag_id)值(20,开始,tas))
//存储帖子 公共函数 storeNewPost(请求 $request) //返回 $request->all(); $请求->验证([ 'post_title' => '必需', 'post_details' => '必需', 'category_id' => '必需', '图像' => '图像|最大:15360|尺寸:max_width=4000,max_height=3000' ]); $image = $request->file('post_thumbnail'); $name_gen=uniqid().'.'.$image->getClientOriginalExtension(); Image::make($image)->resize(700,400)->save('frontend/assets/images/post/'.$name_gen); $save_url = '前端/资产/图像/帖子/'.$name_gen; $post = 发布::创建([ 'user_id' => 验证::id(), 'post_uper_title' =>$request->post_uper_title, 'post_title' =>$request->post_title, 'post_sub_title' =>$request->post_sub_title, 'post_details' =>$request->post_details, 'post_slug' =>str_replace(' ', '-', $request->post_title), 'seo_title' =>$request->seo_title, 'seo_descp' =>$request->seo_descp, 'lead' =>$request->lead, 'lead2' =>$request->lead2, '精选' =>$request->精选, 'repoter_name' =>$request->repoter_name, 'division_id' =>$request->division_id, 'district_id' =>$request->district_id, 'category_id' =>$request->category_id, 'post_thumbnail' =>$save_url, 'thumbnail_caption' =>$request->thumbnail_caption, 'thumbnail_alt' =>$request->thumbnail_alt, 'created_at' => Carbon::now(), ]); 如果($post) $tags = explode(",", implode($request->tags)); $tagNames = []; if (!empty($tags)) foreach ($tags 作为 $tagName) $tag = Tags::firstOrCreate(['name'=>$tagName]); 如果($标签) $tagNames[] = $tag->id; $post->tags()->sync($request->tags); $通知 = 数组( '消息' => '帖子插入成功', '警报类型' => '成功' ); return redirect()->route('all.posts')->with($notification); 别的 返回(); //结束插入帖子** 这是我的标签表 **
公共函数 up() Schema::create('tags', function (Blueprint $table) $table->bigIncrements('id'); $table->string('name'); $table->string('slug')->nullable(); $table->longText('description')->nullable(); $table->longText('tag_thumb')->nullable(); $table->text('thumb_caption')->nullable(); $table->text('thumb_alt')->nullable(); $table->softDeletes(); $table->timestamps(); );** 这是我的 Post_tag 表 **
公共函数 up() Schema::create('post_tag', function (Blueprint $table) $table->increments('id'); $table->unsignedBigInteger('post_id')->nullable(); $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); $table->unsignedBigInteger('tag_id')->nullable(); $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade'); $table->timestamps(); );【问题讨论】:
【参考方案1】:我认为您需要在同步时使用$tagNames
数组而不是$request->tags
:
$post->tags()->sync($tagNames);
根据 Laravel 文档,sync()
方法需要一个 ID 数组:
https://laravel.com/docs/8.x/eloquent-relationships#syncing-associations
【讨论】:
Vaibhav Rathore 请告诉我当我输入标签时如何从数据库中获取标签?【参考方案2】:如果您的模型中有 manyToMany 关系,请在控制器中的更新功能上使用 sync()
方法。
例如:$post->tags()->sync($request->tags)
;
如果您需要更多帮助,请告诉我。
【讨论】:
以上是关于如何在 post_table 和 Tags 表中插入标签?的主要内容,如果未能解决你的问题,请参考以下文章