laravel 5.2 带连接的查询范围
laravel 5.2 query scope with join
我想要一个列表,其中包含同一订阅下的所有 post 用户。所以我有订阅 table、用户 table 和 post table。
帖子属于用户,用户属于订阅。
我在 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(????);
}
第二个问题:这是 'hide' post 来自不同订阅的其他用户的好方法吗?
这应该可以解决问题:
$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 手动访问数据,则不会应用它。
我想要一个列表,其中包含同一订阅下的所有 post 用户。所以我有订阅 table、用户 table 和 post table。
帖子属于用户,用户属于订阅。
我在 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(????);
}
第二个问题:这是 'hide' post 来自不同订阅的其他用户的好方法吗?
这应该可以解决问题:
$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 手动访问数据,则不会应用它。