Php 如何为帖子创建类别标签?我使用的是laravel 8

Php 如何为帖子创建类别标签?我使用的是laravel 8,php,laravel,model-view-controller,laravel-8,eloquent-relationship,Php,Laravel,Model View Controller,Laravel 8,Eloquent Relationship,我试图允许用户在表单中创建帖子时创建并向帖子添加类别标签 我还希望这些标签出现在纵断面图中,并作为过滤器按钮,根据它们拥有的标签名称显示帖子 然而,在我尝试实现这一总体结果时,我陷入了困境,因为每次我提交带有标签的帖子时,标签数组总是在视图中显示为空 我的邮箱是: <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Supp

我试图允许用户在表单中创建帖子时创建并向帖子添加类别标签

我还希望这些标签出现在纵断面图中,并作为过滤器按钮,根据它们拥有的标签名称显示帖子

然而,在我尝试实现这一总体结果时,我陷入了困境,因为每次我提交带有标签的帖子时,标签数组总是在视图中显示为空

我的邮箱是:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreatePostsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->id();
            $table->unsignedBigInteger('user_id');
            $table->string('caption');
            $table->string('url');
            $table->string('image');
            $table->text('tags');
            $table->timestamps();

            $table->index('user_id');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('posts');
    }
}
我创建帖子的表单是:

<form action="/posts" enctype="multipart/form-data" method="post">
      @csrf

      <div class="form-group">
          <label for="caption" class="create_caption_label">Post Caption</label>

          <div class="create_caption_div">
              <input id="caption"
              type="text"
              class="form-control @error('caption') is-invalid @enderror"
              name="caption"
              value="{{ old('caption') ?? '' }}"
              autocomplete="caption" autofocus>

              @error('caption')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="form-group">
          <label for="tags" class="create_tags_label">Tags</label>

          <div class="create_tags_div">
              <input id="tags"
              type="text"
              data-role="tagsinput"
              class="form-control @error('tags') is-invalid @enderror"
              name="tags"
              value="{{ old('tags') ?? '' }}"
              autocomplete="tags" autofocus>

              @error('tags')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="form-group">
          <label for="url" class="edit_title_label">URL</label>

          <div class="edit_url_div">
              <input id="url"
              type="text"
              class="form-control @error('url') is-invalid @enderror"
              name="url"
              value="{{ '' }}"
              autocomplete="url" autofocus>

              @error('url')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="create_post_image_div">
        <label for="image" class="create_image_label">Post Image</label>
        <input type="file" class="form-control-file" id="image" name="image">

        @error('image')
        <div class="invalid-feedback-div">
          <strong>{{ $message }}</strong>
        </div>
        @enderror

        <div class="create_post_btn_div">
          <button class="create_post_btn">Save Post</button>
        </div>
      </div>

    </form>

@csrf
后标题
@错误('标题')
{{$message}}
@恩德罗
标签
@错误('标记')
{{$message}}
@恩德罗
统一资源定位地址
@错误('url')
{{$message}}
@恩德罗
后像
@错误('图像')
{{$message}}
@恩德罗
邮政储蓄
最后,我的观点是:(这是提交帖子后标签数组显示为空的地方)

@foreach($user->posts as$post)

发布:{{{$post->created_at->diffForHumans()}

1个

1条评论

image}“class=“carousel\u img\u占位符”> (像) (评论)

{{{$user->username}-{{{$post->caption}

{{$post->caption}

标签: @foreach($post->tags as$tag) {{$tag->name} @endforeach @endforeach
我如何解决这个问题


此外,我如何允许标记作为过滤器按钮,根据它们拥有的标记名称显示帖子?

您可以将标记保存为数据库中的json数组。然后在模型中转换为数组,这样在检索时它将自动成为数组。保存时,将标记传递为数组,然后它将自动转换为json string

protected $casts = [
    'tags' => 'array',
];

您正在将标记保存为文本,而不是JSON。因此您在foreach中无法获得它。此外,请检查是否保存了帖子的其他详细信息?检查此项。帖子的所有详细信息都保存在数据库中。我尝试将标记保存为JSON,但标记仍然没有显示在视图中。我还尝试应用您发送的链接中的代码。这实际上是一个previo我使用的是us资源,但结果让我感到困惑。我尝试将其保存为json,但不起作用。在尝试保存到数据库中时,您必须将标记作为数组传递。您可以多次使用select2。
<form action="/posts" enctype="multipart/form-data" method="post">
      @csrf

      <div class="form-group">
          <label for="caption" class="create_caption_label">Post Caption</label>

          <div class="create_caption_div">
              <input id="caption"
              type="text"
              class="form-control @error('caption') is-invalid @enderror"
              name="caption"
              value="{{ old('caption') ?? '' }}"
              autocomplete="caption" autofocus>

              @error('caption')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="form-group">
          <label for="tags" class="create_tags_label">Tags</label>

          <div class="create_tags_div">
              <input id="tags"
              type="text"
              data-role="tagsinput"
              class="form-control @error('tags') is-invalid @enderror"
              name="tags"
              value="{{ old('tags') ?? '' }}"
              autocomplete="tags" autofocus>

              @error('tags')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="form-group">
          <label for="url" class="edit_title_label">URL</label>

          <div class="edit_url_div">
              <input id="url"
              type="text"
              class="form-control @error('url') is-invalid @enderror"
              name="url"
              value="{{ '' }}"
              autocomplete="url" autofocus>

              @error('url')
              <div class="invalid-feedback-div">
                <span class="invalid-feedback" role="alert">
                    <strong>{{ $message }}</strong>
                </span>
              </div>
              @enderror
          </div>
      </div>

      <div class="create_post_image_div">
        <label for="image" class="create_image_label">Post Image</label>
        <input type="file" class="form-control-file" id="image" name="image">

        @error('image')
        <div class="invalid-feedback-div">
          <strong>{{ $message }}</strong>
        </div>
        @enderror

        <div class="create_post_btn_div">
          <button class="create_post_btn">Save Post</button>
        </div>
      </div>

    </form>
@foreach( $user->posts as $post )
                  <div class="carousel_posts_container">

                    <div class="post_date_and_edit_div">
                      <div class="posted_date_div">
                        <p class="posted_date">posted: {{ $post->created_at->diffForHumans() }}</p>
                      </div>

                      <div class="post_edit_div">
                        <form action="/posts/{{$post->id}}/edit">
                          <input class="post_edit_btn" type="submit" value="• • •">
                        </form>
                      </div>
                    </div>

                    <div class="post_counter_div">
                      <p class="post_counter">1 like</p>
                    </div>

                    <div class="post_counter_div">
                      <p class="post_counter">1 comment</p>
                    </div>


                    <div class="carousel_post_img_div">
                      <img src="/storage/{{ $post->image }}" class="carousel_img_placeholder">
                    </div>


                    <div class="like_comment_view_container">

                      <div class="view_btn_div">
                        <form action="{{$post->url}}">
                          <input class="like_comment_view_btns" type="submit" value="( View Post )">
                        </form>
                      </div>
                      <div class="like_btn_div">
                        <button type="button" class="like_comment_view_btns">( Like )</button>
                      </div>
                      <div class="comment_btn_div">
                        <button type="button" class="like_comment_view_btns">( Comment )</button>
                      </div>

                    </div>

                    <div class="carousel_caption_container">

                      <div class="carousel_caption_div">
                        <p class="carousel_caption_username">{{$user->username}} - {{$post->caption}}</p>
                        <p class="carousel_caption">{{$post->caption}}</p>
                      </div>

                      <div class="post-tags mb-4">
                        <strong>Tags : </strong>
                        @foreach($post->tags as $tag)
                        <span class="badge badge-info">{{$tag->name}}</span>
                        @endforeach
                      </div>

                    </div>

                  </div>
                  @endforeach
protected $casts = [
    'tags' => 'array',
];