Laravel 从关系表中获取数据

Posted

技术标签:

【中文标题】Laravel 从关系表中获取数据【英文标题】:Laravel Get Data From Relation Table 【发布时间】:2021-08-06 10:44:07 【问题描述】:

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

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

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

【问题讨论】:

尝试多对多 laravel.com/docs/8.x/eloquent-relationships#many-to-many 并急切加载 laravel.com/docs/8.x/eloquent-relationships#eager-loading 与其尝试包,不如阅读有关 eloquent 和 eloquent 关系的文档,以便更好地了解如何使用相关表。 【参考方案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 包。

【讨论】:

当我运行它时,我得到了所有项目,但我只有 2 个带有这个标签的项目。我做错了吗?

以上是关于Laravel 从关系表中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:如何从具有关系的 3 个表中获取数据

如何从另一个表中获取数据?这样我就可以提出条件并建立关系(Laravel + Vue)

从关系中获取数据,Laravel

多个 Laravel Eloquent 关系未显示来自所有关系的数据

Laravel 从两个表中获取数据而不使用分页连接

Laravel - 从数据透视表中获取额外的列值