گرفتن جمع رکورد های برگشتی در لاراول ۵.۸

گاهی لازمه بدونیم یک مدل ما در رابطه با مدل دیگه ای (چند به چند و یک به چند) چه تعداد نتیجه داره؟ برای مثال میخوایم بدونیم این پست من چه تعداد کامنت داره؟ یک عدد میخوام.

برای یک مدل فقط کافیه از متد count بصورت زیر استفاده کنم. (چند نمونه مثال)

نمایش تعداد کامنت های یک کاربر
$user->comments->count();

نمایش تعداد کل پست های یک کاربر در زیر یک پست (برای مثال: تاکنون ۶۵ نوشته از این نویسنده انتشار داده شده)
$post->user->posts->count();

اما وقتی چند مدل/ چند رکورد از دیتابیس رو گرفتیم و میخوایم برای هر کدوم چیزی رو بشماریم از روش زیر استفاده میکنیم:

نمایش تعداد کامنت های هر پست

$posts = App\Post::withCount('comments')->get();

foreach ($posts as $post) {
    echo $post->comments_count;
}

یا شمارنده های با فیلتر بیشتر یا چند شمارنده

use Illuminate\Database\Eloquent\Builder;

$posts = App\Post::withCount(['votes', 'comments' => function (Builder $query) {
    $query->where('content', 'like', 'foo%');
}])->get();

echo $posts[0]->votes_count;
echo $posts[0]->comments_count;

 

منبع: Counting Related Models

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

چهارده − 8 =