2017-02-18 6 views
0

In meinem Laravel-Projekt habe ich das folgende Problem. (Ich habe die Ausgabe ein wenig zur leichteren Lesbarkeit reduziert)Filtern mit Laravel

  1. Ich hole alle Beiträge aus einer Tabelle namens Newsposts. Ich speichere diese als eine Sammlung $ all_posts genannt, die wie folgt aussieht:
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. ich dann alle Einträge aus einer anderen Tabelle user_read Hexe enthält alle Beiträge der aktuellen genannt holen Benutzer haben gelesen. Diese Tabelle enthält einen Verweis auf den Benutzer mit einer 'user_id'-Spalte und einen Verweis auf die Nachrichtenposts mit einer' post_id'-Spalte. Ich speichere diese auch in einer Sammlung, die wie folgt aussieht:
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. Also, was ich jetzt tun möchte, die $ all_posts-Sammlung nehmen und entfernen Sie alle Beiträge aus $ read_posts-collection, und speichern Sie es in einer neuen Sammlung. Lasst uns $ unread_posts nennen. Wie kann ich das erreichen?

Antwort

1

erhalten alle readed Post-ID zuerst, dann Filterfunktion verwenden ungelesenen Beiträge

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

zu filtern, während der Code die Frage beantworten können, sollten Sie einige Erklärungen hinzufügen, was der Code tut und warum löst das OPs Problem . –