我正在用 Laravel 7.28 构建一个项目。我有三个命名的表;项目、标签和 project_tags。在 project_tags 表中有 project_ids 和 tag_ids。它看起来像这样:
我需要获取所有带有标签的项目,其次我需要获取带有特定标签的项目。那么我应该在模型中做什么?我应该如何使用哪个功能?以及如何获取数据?
我发现了 rtconner/laravel-tagging 包,但这是正确的方法吗?感谢您的帮助
答案 0 :(得分:1)
您可能希望在项目和标签之间创建 many to many 关系。
class Project extends Model
{
public function tags()
{
return $this->belongsToMany(Tag::class, 'project_tags')->withTimestamps();
}
}
那么:
// Get all projects with their tags.
Project::with('tags')->get();
// Get projects contain certain a certain tag.
Project::whereHas('tags', function ($query) {
return $query->where('tag', 'some value');
})
此外,标签往往是 polymorphic many to many 关系。因此,如果您想长期手动处理标记,我建议您这样设计。
另外,结帐 spatie/laravel-tags 包裹。