带有联接的laravel 5.2查询范围

use*_*002 4 php laravel eloquent laravel-5 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
Run Code Online (Sandbox Code Playgroud)

我必须在范围文件中放入什么?

public function apply(Builder $builder, Model $model) {
  return $builder->where(????);
}
Run Code Online (Sandbox Code Playgroud)

第二个问题:这是从其他订阅的其他用户“隐藏”帖子的好方法吗?

jed*_*ylo 6

这应该可以解决问题:

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

只要您始终使用Post模型的方法来加载帖子,这是从其他订阅中隐藏帖子的好方法,因为只有在应用全局范围的情况下。如果您使用DB Facade 手动访问数据,则不会应用它。