使用关系表从数据库中获取记录时出现问题

Posted

技术标签:

【中文标题】使用关系表从数据库中获取记录时出现问题【英文标题】:Problem when getting records from database with relationship table 【发布时间】:2020-05-15 03:28:45 【问题描述】:

我无法使用中间表将照片与标签关联起来。

在下面的示例中,如何在 Laravel 中使用 Eloquent 关系方法选择属于标签 1 的所有照片?

我有这些表:

-Photos Table

 |  id  |    name    | description |
    1     photo1.png      ....
    2     photo2.png      ....
    3     photo3.png      ....
-Tags Table

 |  id  |    name    |
    1      Aesthetic
    2        Dark
-Tags Relations

 | id | tag_id | photo_id |
   1      1         3
   2      1         2
   3      2         1

【问题讨论】:

【参考方案1】:

首先,您需要确保 Photos 和 Tags 表都定义了关系。

在照片模型下你应该有以下功能:

public function tags() 
    return $this->belongsToMany(
        Tag::class,
        "photos_tags", // the name of the pivot table
        "photo_id",
        "tag_id"
    );

在标签模型下,您应该具有以下功能:

public function photos() 
    return $this->belongsToMany(
        Photo::class,
        "tags_photos", // the name of the pivot table
        "tag_id",
        "photo_id"
    );

现在要访问与 id 1 的照片相关的所有标签,您可以调用以下代码:

Photo::findOrFail(1)->tags()->get();

您可以对特定标签执行相同操作以获取其所有照片。

Tag::findOrFail(1)->photos()->get();

希望这会引导您实现您的愿望。

【讨论】:

很高兴听到这个消息!祝你进一步发展好运!^^

以上是关于使用关系表从数据库中获取记录时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

向核心数据添加记录时出现 NSSet 错误(多对多关系)

尝试获取关系中的数据时出现 Symfony 错误

访问核心数据中的子对象时出现关系错误

使用 golang 从 DynamoDB 获取记录时出现紧急运行时错误

附加 DataFrame 时出现“数据类型不理解”

Django使用“通过”关系表从模型中获取所有相关对象