如何检索帖子所属类别的名称

时间:2019-08-22 14:55:25

标签: php laravel eloquent blogs

我正在通过开发一个小型博客来学习Laravel,以学习该框架及其所提供的内容。我现在面临的问题是“如何检索帖子最初所属的类别的名称”

我的职位和类别之间的关系是很多很多的。 我有三个桌子

a = 'swift'
shift_amount = 2
a_shifted_left  = a[shift_amount:] + a[:shift_amount]
a_shifted_right = a[-shift_amount:] + a[:-shift_amount] 

我的帖子模型

Post
Category
CategoryPost

我的类别模型

public function categories()
    {
        return $this->belongsToMany('App\category');
    }

除此之外,我没有对数据透视表进行任何建模。 我需要做吗?

我的数据透视表中的记录如下:

public function posts()
    {
        return $this->belongsToMany('App\Post');
    }

我想显示帖子最初所属的当前类别的名称,以便用户可以在编辑页面中添加或删除类别。

这些是我的迁移:

发布表

    id  category_id  post_id  
------  -----------  ---------
     6            1         16
     7            2         16
     8            3         16
     9            1         17
    10            3         17
    11            1         18
    12            2         18

类别表:

public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id');
            $table->Integer('status_id');
            $table->string('title');
            $table->text('body');
            $table->text('media');
            $table->string('tags');
            $table->timestamps();
        });
    }

CategoryPost表格:

 public function up()
{
    Schema::create('categories', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->text('description');
        $table->timestamps();
    });
}

1 个答案:

答案 0 :(得分:2)

编辑迁移:

类别发布表

public function up()
{
    Schema::create('category_post', function (Blueprint $table) {
        $table->increments('id');
            $table->Integer('category_id')->unsigned();
            $table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
            $table->Integer('post_id')->unsigned();
            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
            $table->timestamps();
    });
}

然后在您的控制器中:

public function edit(Post $post) {
 $post=Post::with('categories')->find($post->id);
 $categories=Category::all(); 

 return view('admin.pages.post.edit',compact('post','categories')); }

在刀片中,您可以执行以下操作:

@foreach($post->categories as $category)
    {{ $category->name }}
@endforeach

这应该可以,但是如果您有错误,请在此处提供。