0

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

  1. 我从名为 Newsposts 的表中获取所有帖子。我将它存储为一个名为 $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 的表中获取所有条目,其中包含当前用户已阅读的所有帖子。此表包含对具有“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。我怎样才能做到这一点?
4

1 回答 1

1

先获取所有已读帖子id,然后使用过滤功能过滤未读帖子

$readedPosts = $user_read->pluck('post_id');
$unread_posts = $all_posts->filter(function($value) use ($readedPosts) {
      return !in_array($value->id, $readedPosts);  
})
于 2017-02-18T13:36:52.873 回答