@Div-Man

Как вывести категорию для постов?

Использую связь многие ко многим.

Надо вывести список постов, к какой категории относится пост, я это сделал с помощью построителя, так как не знаю, как это сделать, через 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 ▶}
}
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
@potkot
PHP программист
Я делал примерно так

Модель для статей:
class Articles extends Model
{
    protected $table = 'article';

    public function category()
    {
        return $this->belongsTo('ArticlesCategory', 'id_category', 'id');
    }
}


Модель для категорий:
class ArticlesCategory extends Model
{
    protected $table = 'article_category';

    public function articles()
    {
        return $this->hasMany('Articles', 'id_category', 'id');
    }
}


Получаем статьи с категориями в контроллере
Articles::with('category')->paginate(25);

В шаблоне так:
$article->category->name
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы