Rumah >pembangunan bahagian belakang >tutorial php >Penapisan objek koleksi mengikut jenis dengan WhereStanceof

Penapisan objek koleksi mengikut jenis dengan WhereStanceof

Karen Carpenter
Karen Carpenterasal
2025-03-06 02:02:08315semak imbas

Filtering Collection Objects by Type with whereInstanceOf

Kaedah

Laravel menyediakan cara ringkas untuk menapis set berdasarkan jenis objek, yang sangat berguna apabila berurusan dengan hubungan polimorfik atau set objek campuran. whereInstanceOf

Berikut adalah contoh mudah yang menunjukkan cara menapis koleksi

dan whereInstanceOf objek menggunakan User: 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);

Mari kita lihat contoh yang lebih praktikal: pengendalian suapan pemberitahuan yang mengandungi pelbagai jenis aktiviti.

<?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
                ])
        ];
    }
}

Memudahkan penapisan berasaskan jenis dalam koleksi, menjadikannya lebih mudah untuk mengendalikan jenis objek bercampur sambil mengekalkan kod mudah dan mudah dibaca. whereInstanceOf

Atas ialah kandungan terperinci Penapisan objek koleksi mengikut jenis dengan WhereStanceof. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn