我有以下两个表,公共变量为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 = 1
在Tags
表格中有3个相关标记:Tag1
,Tag2
和Tag3
。
如何使用post_id
获取每个帖子的相关标签,然后才能在视图中使用它们?
感谢。
答案 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
。