如何获取每条记录的相关数据?

时间:2014-10-30 19:00:17

标签: laravel laravel-4

我有以下两个表,公共变量为post_id

Posts表:

+---------+---------+-------+---------+
| post_id | user_id | title | content |
+---------+---------+-------+---------+
|       1 |       1 | Hello | World   |
+---------+---------+-------+---------+

Tags表:

+--------+---------+----------+
| tag_id | post_id | tag_name |
+--------+---------+----------+
|      1 |       1 | Tag1     |
|      2 |       1 | Tag2     |
|      3 |       1 | Tag3     |
+--------+---------+----------+

这是我当前的Post模型,没有任何异常:

class Post extends Eloquent {

    /**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'posts';

    /**
     * The primary key of the table.
     *
     * @var string
     */
    protected $primaryKey = 'post_id';

    /**
     *  The post id.
     *
     * @var integer
     */
    protected $post_id = 0;

    /**
     *  The user id of the post.
     *
     * @var integer
     */
    protected $user_id = 0;

    /**
     *  The title of the post.
     *
     * @var string
     */
    protected $title = '';

    /**
     *  The content of the post.
     *
     * @var string
     */
    protected $content = '';

}

这是我的控制器:

class IndexController extends BaseController
{

    /**
     * Show a list of post.
     *
     * @return view
     */
    public function showIndex()
    {
        $posts = Post::all();

        return View::make('index', array('posts' => $posts));
    }

}

我的问题是,除了在视图中显示帖子外,我还会如何为每个帖子获取相关标签。

例如,使用上面的表格,post_id = 1Tags表格中有3个相关标记:Tag1Tag2Tag3

如何使用post_id获取每个帖子的相关标签,然后才能在视图中使用它们?

感谢。

3 个答案:

答案 0 :(得分:0)

这应该有效

型号:

class Tag extends Eloquent {
    // other stuff
    public function tags(){
        return $this->hasMany('Tag');
    }
}

查询

Post::with('tags')->get();

使用循环访问标记

foreach($post->tags as $tag){
    echo $post->tag_name;
}

答案 1 :(得分:0)

你应该首先define a many to many你的帖子和标签之间的关系,然后你

 $posts = Posts::with('tags')->get();

答案 2 :(得分:0)

您需要使用Eloquent来建立模型之间的关系。这就是一个例子:

class Post extends Eloquent {

    public function tags()
    {
        return $this->hasMany('Tag');
    }

}

然后你可以做这样的事情来获得与帖子相关联的标签

Post::find(1)->tags();

您还需要将tag_id添加到post表格以正确设置此关系。在tags表格中,我会引用id而不是tag_id