使用 Laravel 过滤
Filtering with Laravel
在我的 Laravel 项目中,我遇到了以下问题。 (为了便于阅读,我稍微减少了输出)
- 我从名为 Newsposts 的 table 中获取所有帖子。我将其存储为一个名为 $all_posts 的集合,如下所示:
Collection {#216 ▼
#items: array:7 [▼
0 => NewsPost {#227 ▶}
1 => NewsPost {#228 ▶}
2 => NewsPost {#229 ▼
#attributes: array:6 [▼
"id" => 6
"title" => "Sample title"
"body" => "<p>Some html</p>"
"user_id" => 15
]
#original: array:6 [▶]
#casts: []
.
.
#guarded: array:1 [▶]
}
3 => NewsPost {#230 ▶}
4 => NewsPost {#231 ▶}
]
}
- 然后我从另一个名为 user_read table 的 获取所有条目,其中包含当前用户已阅读的所有帖子。此 table 包含对具有 'user_id' 列的用户的引用,以及对具有 'post_id' 列的新闻帖子的引用。我还将其存储在一个集合中,如下所示:
Collection {#219 ▼
#items: array:2 [▼
0 => UserRead {#210 ▼
#attributes: array:4 [▼
"user_id" => 15
"post_id" => 6
]
#original: array:4 [▶]
#casts: []
.
.
#guarded: array:1 [▶]
}
1 => UserRead {#217 ▶}
]
}
- 所以我现在要做的是获取 $all_posts-collection 并删除 $read_posts-collection 中的所有帖子,并将其存储在一个新的集合中。让我们称之为 $unread_posts。我怎样才能做到这一点?
先获取所有已读postid,再用filter函数过滤未读posts
$readedPosts = $user_read->pluck('post_id');
$unread_posts = $all_posts->filter(function($value) use ($readedPosts) {
return !in_array($value->id, $readedPosts);
})
在我的 Laravel 项目中,我遇到了以下问题。 (为了便于阅读,我稍微减少了输出)
- 我从名为 Newsposts 的 table 中获取所有帖子。我将其存储为一个名为 $all_posts 的集合,如下所示:
Collection {#216 ▼
#items: array:7 [▼
0 => NewsPost {#227 ▶}
1 => NewsPost {#228 ▶}
2 => NewsPost {#229 ▼
#attributes: array:6 [▼
"id" => 6
"title" => "Sample title"
"body" => "<p>Some html</p>"
"user_id" => 15
]
#original: array:6 [▶]
#casts: []
.
.
#guarded: array:1 [▶]
}
3 => NewsPost {#230 ▶}
4 => NewsPost {#231 ▶}
]
}
- 然后我从另一个名为 user_read table 的 获取所有条目,其中包含当前用户已阅读的所有帖子。此 table 包含对具有 'user_id' 列的用户的引用,以及对具有 'post_id' 列的新闻帖子的引用。我还将其存储在一个集合中,如下所示:
Collection {#219 ▼
#items: array:2 [▼
0 => UserRead {#210 ▼
#attributes: array:4 [▼
"user_id" => 15
"post_id" => 6
]
#original: array:4 [▶]
#casts: []
.
.
#guarded: array:1 [▶]
}
1 => UserRead {#217 ▶}
]
}
- 所以我现在要做的是获取 $all_posts-collection 并删除 $read_posts-collection 中的所有帖子,并将其存储在一个新的集合中。让我们称之为 $unread_posts。我怎样才能做到这一点?
先获取所有已读postid,再用filter函数过滤未读posts
$readedPosts = $user_read->pluck('post_id');
$unread_posts = $all_posts->filter(function($value) use ($readedPosts) {
return !in_array($value->id, $readedPosts);
})