Laravel 从关系表中获取数据

时间:2021-05-17 06:50:44

标签: mysql laravel model tags laravel-7

我正在用 Laravel 7.28 构建一个项目。我有三个命名的表;项目、标签和 project_tags。在 project_tags 表中有 project_ids 和 tag_ids。它看起来像这样:

database_schema

我需要获取所有带有标签的项目,其次我需要获取带有特定标签的项目。那么我应该在模型中做什么?我应该如何使用哪个功能?以及如何获取数据?

我发现了 rtconner/laravel-tagging 包,但这是正确的方法吗?感谢您的帮助

1 个答案:

答案 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 包裹。

相关问题