如何访问许多关系laravel中的所有表数据

时间:2014-06-26 06:38:58

标签: php laravel-4 eloquent

我有3张桌子。

1.posts

2.categories

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');
}

在帖子模型中:

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;
}

我可以查看所有帖子数据。但类别名称不是。

我的帖子循环:

<?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 个答案:

答案 0 :(得分:0)

因为它是多对多关系$post->categories->name不起作用。它不知道你想要哪个类别(中的许多类别)。

因此,您可以使用$post->categories()->first()->name来获取第一个类别的名称或循环它们以获取所有类别的名称。