laravel 5.2查询范围与连接

时间:2016-01-13 21:10:42

标签: php laravel laravel-5 eloquent laravel-5.2

我想要一个包含同一订阅下所有用户帖子的列表。所以我有一个订阅表,用户表和帖子表。

帖子属于用户,用户属于订阅。

我在laravel.com上读到我可以使用全局查询范围。

SQL会(我认为):

SELECT * FROM posts INNER JOIN users ON posts.user_id = users.id INNER JOIN subscriptions ON users.subscription_id = subscriptions.id WHERE subscriptions.id = $subscription_id_of_user_that_is_logged_in

我需要在范围文件中添加什么内容?

public function apply(Builder $builder, Model $model) {
  return $builder->where(????);
}

第二个问题:这是一个隐藏'的好方法。来自不同订阅的其他用户的帖子?

1 个答案:

答案 0 :(得分:4)

这应该可以解决问题:

$builder
  ->join('users', 'posts.user_id', '=', 'users.id')
  ->join('subscriptions', 'users.subscription_id', '=', 'subscriptions.id')
  ->where('subscriptions.id', Auth::user()->subscription_id);

这是隐藏其他订阅的帖子的好方法,只要您始终使用Post模型的方法加载帖子,因为只有应用全局范围。如果您使用 DB facade手动访问数据,则无法应用它。