2017-02-18 67 views
0

在我的Laravel项目中,我有以下问题。 (为了便于阅读,我减少了输出)过滤与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 ▶} 
    ] 
} 
  • 我然后叫user_read巫另一个表获取所有条目包含所有职位目前用户已阅读。这个表格包含了一个用户对'user_id'列的引用,以及对带有'post_id'列的newsposts的引用。我还保存这个集合中,它看起来像这样:
  • 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收集并删除所有帖子从$ read_posts-collection,并将其存储在一个新的集合中。让我们称它为$ unread_posts。我怎样才能做到这一点?
  • 回答

    1

    得到所有readed帖子ID,然后再使用过滤功能来过滤未读帖子

    $readedPosts = $user_read->pluck('post_id'); 
    $unread_posts = $all_posts->filter(function($value) use ($readedPosts) { 
         return !in_array($value->id, $readedPosts); 
    }) 
    
    +0

    ,而你的代码可以回答这个问题,你应该添加一些说明的代码做什么,为什么是解决了有机磷农药的问题。 –