Использую связь многие ко многим.
Надо вывести список постов, к какой категории относится пост, я это сделал с помощью построителя, так как не знаю, как это сделать, через ORM.
3 таблицы:
categories
-id
-name
images
-id
-image
-description
category_image (промежуточная)
-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>
<td>
//////////////////////////////////////////////////////////////////
Попробовал с помощью ORM
dd( $this->belongsToMany(
Category::class,
'category_image',
'image_id',
'category_id',
1
));
А как теперь вывести имя категории?
шина
BelongsToMany {#494 ▼
#table: "category_image"
#foreignPivotKey: "image_id"
#relatedPivotKey: "category_id"
#parentKey: 1
#relatedKey: "id"
#relationName: "getCategoryTitle"
#pivotColumns: []
#pivotWheres: []
#pivotWhereIns: []
#pivotValues: []
+withTimestamps: false
#pivotCreatedAt: null
#pivotUpdatedAt: null
#using: null
#accessor: "pivot"
#query: Builder {#493 ▶}
#parent: Image {#473 ▶}
#related: Category {#490 ▶}
}