我使用多对多关系。
有必要列出帖子所属类别的文章,因为我不知道如何通过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
));
有没有一种简单的方法可以使用关系获取每个图像的类别名称。
答案 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')(名称取决于您在该类中属于多个函数的名称)来获取类别行>