Heim > Backend-Entwicklung > PHP-Tutorial > Filterungsobjekte nach Typ mit wherinstance of filtern

Filterungsobjekte nach Typ mit wherinstance of filtern

Karen Carpenter
Freigeben: 2025-03-06 02:02:08
Original
314 Leute haben es durchsucht

Filtering Collection Objects by Type with whereInstanceOf

Die

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:

filtert wird
<?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);
Nach dem Login kopieren

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
                ])
        ];
    }
}
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage