LaravelのwhereInstanceOf
メソッドは、オブジェクトタイプに基づいてセットをフィルタリングする簡潔な方法を提供します。これは、多型の関係または混合オブジェクトセットを扱うときに特に役立ちます。
以下は、whereInstanceOf
: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);
より実用的な例を見てみましょう。さまざまな種類のアクティビティを含む通知フィードの処理。
<?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
以上がwhere instanceのタイプごとに収集オブジェクトをフィルタリングしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。