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

Penapisan objek koleksi mengikut jenis dengan WhereStanceof

Karen Carpenter
Lepaskan: 2025-03-06 02:02:08
asal
314 orang telah melayarinya

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);
Salin selepas log masuk

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
                ])
        ];
    }
}
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan