Rumah >pembangunan bahagian belakang >tutorial php >Penapisan objek koleksi mengikut jenis dengan WhereStanceof
Laravel menyediakan cara ringkas untuk menapis set berdasarkan jenis objek, yang sangat berguna apabila berurusan dengan hubungan polimorfik atau set objek campuran. whereInstanceOf
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!