Laravel 如何通过中间表获取数据?

3个表
Photo

id
url

Tag

id
name

TagMap

id
photo_id
tag_id

TagMap 是中间表,想问下,我现在如何通过 Tag.id 获取到对应所有的 Photo ?

比如我现在要获取 tag.id 为 3 的所有图片,请问该怎么做?

阅读 8.3k
3 个回答

eloquent 的话:
首先你要知道 Tag 和 Photo 是多对多关系了,然后在对应的模型声明关联关系,这里是多对多关系

  1. 在 Tag 模型中

    /**
     * 获得所有图片。
     */
    public function photos()
    {
    return $this->belongsToMany('App\Photo','tag_maps');
    }
  2. 在 Photo 中

    /**
     * 获得所有标签。
     */
    public function tags()
    {
    return $this->belongsToMany('App\Tag','tag_maps');
    }

'tag_maps' 修改为你对应的表名,'tag_maps'只是我猜测的表名。

获取 tag.id 为 3 的所有图片

$tag = Tag::findOrFail(3);
$photos = tag->photos;
// 或者 $photos = $tag->photos()->where()->get() # where自己写或者不要

laravel 5.5 中文文档链接 Eloquent:关联

正解请看 @96qbhy

最主要的就是看看多对多关联

这其实跟博客类的文章表,标签表,文章与标签关系表是一样的,

写在article的 Model中的获取该文章下的所有 标签
具体请参照如下写法

    public function tag(){
        
        return $this->belongsToMany('App\Model\Tag','article_tag','article_id','tag_id');
        
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题