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

Filterungsobjekte nach Typ mit wherinstance of filtern

Karen Carpenter
Karen CarpenterOriginal
2025-03-06 02:02:08315Durchsuche

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);

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!

Stellungnahme:
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