Heim >Backend-Entwicklung >PHP-Tutorial >Filterungsobjekte nach Typ mit wherinstance of filtern
Laravels whereInstanceOf
-Methode bietet eine prägnante Möglichkeit, Sätze basierend auf dem Objekttyp zu filtern, was besonders nützlich ist, wenn es sich um polymorphe Beziehungen oder gemischte Objektsätze handelt.
Das Folgende ist ein einfaches Beispiel, das zeigt, wie eine Sammlung von whereInstanceOf
und User
-Objekten mit Post
:
<?php use App\Models\User; use App\Models\Post; use Illuminate\Support\Collection; $collection = collect([ new User(['name' => 'John']), new Post(['title' => 'Hello']), new User(['name' => 'Jane']), ]); $users = $collection->whereInstanceOf(User::class);
Schauen wir uns ein praktischeres Beispiel an: Bearbeitung von Benachrichtigungssemedien, die verschiedene Arten von Aktivitäten enthalten.
<?php namespace App\Services; use App\Models\Comment; use App\Models\Like; use App\Models\Follow; use Illuminate\Support\Collection; class ActivityFeedService { public function getUserFeed(User $user): array { // 获取所有活动 $activities = collect([ ...$user->comments()->latest()->limit(5)->get(), ...$user->likes()->latest()->limit(5)->get(), ...$user->follows()->latest()->limit(5)->get(), ]); // 按创建时间排序 $activities = $activities->sortByDesc('created_at'); return [ 'comments' => $activities->whereInstanceOf(Comment::class) ->map(fn (Comment $comment) => [ 'type' => 'comment', 'text' => $comment->body, 'post_id' => $comment->post_id, 'created_at' => $comment->created_at ]), 'likes' => $activities->whereInstanceOf(Like::class) ->map(fn (Like $like) => [ 'type' => 'like', 'post_id' => $like->post_id, 'created_at' => $like->created_at ]), 'follows' => $activities->whereInstanceOf(Follow::class) ->map(fn (Follow $follow) => [ 'type' => 'follow', 'followed_user_id' => $follow->followed_id, 'created_at' => $follow->created_at ]) ]; } }
whereInstanceOf
vereinfacht die typenbasierte Filterung in Sammlungen und erleichtert es, gemischte Objekttypen zu verarbeiten und den Code einfach und einfach zu lesen.
Das obige ist der detaillierte Inhalt vonFilterungsobjekte nach Typ mit wherinstance of filtern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!