Как показать название категории для каждой статьи? - PullRequest
0 голосов
/ 04 сентября 2018

Я использую отношение «многие ко многим».

Необходимо перечислить статьи, к каким категориям относится пост, я сделал это с помощью компоновщика, так как не знаю, как это сделать, через ORM.

У меня есть три таблицы:

категории -Я бы -name

изображения -Я бы -образ -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>
  <tr>
@endforeach

Изображение модели

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

Есть ли простой способ получить название категории для каждого изображения, используя отношение.

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

в модели изображения

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
   }
}
0 голосов
/ 04 сентября 2018

Если ваши отношения установлены правильно с laravel, вы можете использовать сокращение -> с ('category') (имя зависит от имени вашей принадлежности ко многим функциям в вашем классе), чтобы также захватить строку категории

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...