Как получить доступ ко всем данным таблицы во многих отношениях laravel

#php #laravel-4 #eloquent

#php #laravel-4 #красноречивый

Вопрос:

У меня есть 3 таблицы.

1. сообщения

2.категории

3.category_post.

Мои таблицы сообщений здесь :

  ------------ ------------------ ------ ----- --------------------- ---------------- 
| Field      | Type             | Null | Key | Default             | Extra          |
 ------------ ------------------ ------ ----- --------------------- ---------------- 
| id         | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| title      | varchar(255)     | NO   |     | NULL                |                |
| slug       | varchar(255)     | NO   |     | NULL                |                |
| reporter   | varchar(255)     | NO   |     | NULL                |                |
| meta       | varchar(255)     | NO   |     | 0                   |                |
| body       | text             | NO   |     | NULL                |                |
| image      | varchar(255)     | NO   |     | 0                   |                |
| top        | tinyint(1)       | NO   |     | 0                   |                |
| post_count | int(11)          | NO   |     | 0                   |                |
| created_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
 ------------ ------------------ ------ ----- --------------------- ---------------- 
 

Моя таблица категорий здесь:

  --------------- ------------------ ------ ----- --------------------- ---------------- 
| Field         | Type             | Null | Key | Default             | Extra          |
 --------------- ------------------ ------ ----- --------------------- ---------------- 
| id            | int(10) unsigned | NO   | PRI | NULL                | auto_increment |
| name          | varchar(255)     | NO   |     | NULL                |                |
| category_slug | varchar(255)     | NO   |     | NULL                |                |
| parrent_id    | int(11)          | NO   |     | 0                   |                |
| created_at    | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
| updated_at    | timestamp        | NO   |     | 0000-00-00 00:00:00 |                |
 --------------- ------------------ ------ ----- --------------------- ---------------- 
 

Моя таблица category_post:

  ------------- ------------------ ------ ----- --------- ---------------- 
| Field       | Type             | Null | Key | Default | Extra          |
 ------------- ------------------ ------ ----- --------- ---------------- 
| id          | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| category_id | int(10) unsigned | NO   | MUL | NULL    |                |
| post_id     | int(10) unsigned | NO   | MUL | NULL    |                |
 ------------- ------------------ ------ ----- --------- ---------------- 
 

Я могу создать сообщение с несколькими выбранными категориями. Но когда я хочу показать сообщение по категориям, я не могу получить доступ к таблице категорий. Это означает, что я хочу просматривать название категории с каждым сообщением.

Вот мои модели:

В модели категории:

 public function posts()
{
    return $this->belongsToMany('Post');
}
 

В модели Post:

 public function categories()
{
    return $this->belongsToMany('Category');
}
 

Моя вспомогательная функция запроса предназначена для публикации по категориям:

 public static function cat_post($category, $limit, $top)
{
    $posts = Post::whereHas('categories', function($q) use ($category, $top)
        {
            $q->where('name', 'like', $category);
            $q->where('top', 'like', $top);

        })->with('categories')->take($limit)->orderBy('created_at', 'DESC')->get();
    return $posts;
}
 

Я могу просматривать все данные post. Но названия категории нет.

Мои циклы Post:

 <?php $headline = Helper::head_post(10, 1); ?>

  @foreach ($headline as $post)
    <li><a href="">{{ $post->title }}</a></li>
  @endforeach
 

когда я пытаюсь использовать это для названия категории, оно не работает:

   @foreach ($headline as $post)
    <li><a href="">{{ $post->categories->name }}</a></li>
  @endforeach
 

Пожалуйста, помогите мне.

Ответ №1:

Потому что это отношение «многие ко многим $post->categories->name » не будет работать. Он не знает, какую категорию (из многих) вы хотите назвать.

Таким образом, вы могли бы, например, использовать $post->categories()->first()->name для получения имени первой категории или перебирать их, чтобы получить имя всех категорий.