使用 Laravel 过滤

Filtering with Laravel

在我的 Laravel 项目中,我遇到了以下问题。 (为了便于阅读,我稍微减少了输出)

  1. 我从名为 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 ▶}
  ]
}
  1. 然后我从另一个名为 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 ▶}
  ]
}
  1. 所以我现在要做的是获取 $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);  
})