使用雄辩的力量。
创建模型文件(Post.php、Video.php、Tag.php)。
Post.php
class Post extends Eloquent {
public function tags()
{
return $this->belongsToMany('Tag');
}
}
视频.php
class Video extends Eloquent {
public function tags()
{
return $this->belongsToMany('Tag');
}
}
标签.php
class Tag extends Eloquent {
public function posts()
{
return $this->belongsToMany('Post');
}
public function videos()
{
return $this->belongsToMany('Video');
}
}
您可以在 Laravel Eloquent Relationships 文档中阅读更多信息。
接下来,创建两个数据透视表,而不是 taggeables:第一个 post_tag 使用字段 tag_id 和 post_id 将帖子与标签连接起来,第二个 tag_video 使用字段 video_id 和 tag_id 进行连接带有标签的视频。
最后,要获取具有相同标签 ID(假设为 $tag_id)的所有帖子和视频,您可以执行以下操作(如果您的 Post.php 模型确实包含 tags() 方法):
对于帖子:
$posts = Post::whereHas(`tags`, function($q) {
$q->where('id', '=', $this->id);
})->orderBy('name', 'ASC')->get();
对于视频:
$videos = Video::whereHas(`tags`, function($q) {
$q->where('id', '=', $this->id);
})->orderBy('name', 'ASC')->get();