如何显示每篇文章的类别名称?

时间:2018-09-04 11:00:54

标签: laravel

我使用多对多关系。

有必要列出帖子所属类别的文章,因为我不知道如何通过ORM进行操作,所以我在构建器的帮助下完成了该操作。

我有三个表:

类别 -ID 名称

图片 -ID -图片 -说明

category_image(数据透视表) -ID -image_id -category_id

public function getCategoryTitle($id)
    {  
        $post = DB::table('category_image')
                     ->where('image_id', '=', $id)
                     ->get();
        $categoryImage = $post->toArray()[0]->category_id;

        $showCategory = DB::table('categories')
                     ->where('id', '=', $categoryImage)
                     ->get();

       return $showCategory->toArray()[0]->name;

    }

现在事实证明,对于每篇文章,数据库都会有2个以上的请求,这很糟糕。

输出

public function index()
    {
        $posts = Image::all();

        return view('admin.posts.index', ['posts'=>$posts]);
    }

我尝试使用->

来获取类别名称
@foreach($posts as $post)
  <tr>
      <td>{{$post->id}}</td>
      <td>{{$post->description}}</td>
      <td>{{$post->getCategoryTitle($post->id)}}</td>
  <tr>
@endforeach

图片模型

dd( $this->belongsToMany(
            Category::class,
            'category_image',
            'image_id',
            'category_id',
                1
        ));

有没有一种简单的方法可以使用关系获取每个图像的类别名称。

2 个答案:

答案 0 :(得分:4)

在图像模型中

public function categories(){
 return $this->belongsToMany(Category::class)
}

类别模型

public function images(){
 return $this->belongsToMany(Image::class)
}

with()用于紧急加载,可让您在单个查询中获取类别

$posts = Image::with("categories")->get();

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

答案 1 :(得分:1)

如果您使用laravel正确建立了关系,则可以使用速记-> with('categories')(名称取决于您在该类中属于多个函数的名称)来获取类别行