首页 > 解决方案 > 卡在雄辩的查询和子查询中

问题描述

我想在表格中显示用户的姓名以及本周发布的照片​​数量。示例:User1 发布了 10 张照片,User2 发布了 20 张照片...

所以我需要一个计数,但我不知道如何。

图片型号:

public function user()
{
   return $this->belongsTo('App\Models\User');
}

用户型号:

public function pictures()
{
   return $this->hasMany('App\Models\Picture');
}

在控制器中查询:

$users = User::whereHas('pictures', 
      fn($q) => $q->where('created_at', '>=', Carbon::now()->subDays(7)->toDateTimeString()))
    ->limit(10)
    ->get();

在视图中:

{{ $user->photos->count() }}

除了它计算用户的所有照片而不仅仅是过去一周的照片。我怎样才能只计算最近的照片?

标签: phplaraveleloquent

解决方案


我这样做:

在用户模型中:

public function current_week_pictures()
{
   return $this->hasMany('App\Models\Picture')
            ->whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()]);
}

在控制器中查询:

$users = User::whereHas('current_week_pictures')
            ->with('current_week_pictures')
            ->limit(10)
            ->get();

在视图中,计数:

{{ $user->pictures->count() }}

推荐阅读