【问题标题】:Laravel eloquent model - get rows using intermediate tableLaravel 雄辩模型 - 使用中间表获取行
【发布时间】:2016-04-15 13:42:08
【问题描述】:

我有 3 个表用户、帖子和照片。

帖子表与照片和用户(例如post.user_id=users.idpost_photo_id=photos._id)具有一对一的关系。

我用

public function posts(){
    return $this->hasMany('Post');
}

我使用 $user->posts() 获取用户的所有帖子。

我需要按用户获取所有照片,例如 $user->photos。

SELECT photos.* FROM photos JOIN posts ON posts.photo_id=photos.id JOIN users ON users.id=posts.user_id WHERE user_id=1

注意:photos 表只有 2 个字段,id 和 photo。

【问题讨论】:

  • 尝试使用子查询附加->whereIn(),或者直接在关系上进行连接。关系只返回一个查询对象,所有查询构建器方法都存在以供使用。

标签: php mysql laravel-5 eloquent


【解决方案1】:

在您的用户模型中,创建一个类似的关系

Class User Extends Model
{
...
public function photos()
{
   return $this->hasManyThrough('Photos','Posts','photo_id','id');
   // Params (all strings): Final Model, Intermediate Model, Intermediate Model Key (posts), final Model Key (your photos)  
}

public function Posts()
{
   return $this->hasMany('Posts');
}
...
}// end class

然后在您的控制器中,您只需使用关系调用您的数据。这假设你在暗示,但你明白了......

$picturesByUser = $this->user->with(['posts','photos'])->find($id);

最后,在你的刀片中,只是急切地加载它们......

@foreach(...)
  $user->photos->pathToPicture;
  $user->posts->pictureTitle;
@endforeach

Straight out of the Laravel Docs

【讨论】:

  • 这个 (hasManyThrough) 仅适用于 Laravel 5.8*
猜你喜欢
  • 2019-07-16
  • 2021-08-11
  • 2016-03-09
  • 2015-08-15
  • 1970-01-01
  • 2013-05-10
  • 2019-02-12
  • 2013-06-04
  • 2016-11-26
相关资源
最近更新 更多