这是用户模型
public function userpackages()
{
return $this->hasMany('App\UserPackages');
}尝试让用户包形成特定的月份和年份,但它返回所有记录。
$users = User::with(['team', 'userpackages' => function($package) use($month,$year) {
$package->whereMonth('created_at', $month)->whereYear('created_at', $year);
}])->get();抓取
foreach ($users as $key => $user) {
$userpackages = $user->userpackages;
}发布于 2021-12-07 22:25:46
如果我的理解是正确的,您正在过滤急切的负载,但是这不会影响返回的模型。您需要使用whereHas()重复筛选器,以限制返回的模型。此外,像whereDate()这样的函数可能效率很低,特别是当列被索引时。我建议在搜索日期范围时使用whereBetween()。
$date = Carbon::createFromFormat("Y-m", "$year-$month");
$range = [$date->startOfMonth(), $date->endOfMonth()];
$users = User::with('team')
->with(['userpackages' => fn ($q) => $q->whereBetween('created_at', $range)])
->whereHas('userpackages', fn ($q) => $q->whereBetween('created_at', $range)
->get();为进一步解释:
User::with('userpackages')返回所有用户,每个packages.User::with(['userpackages' => 'some condition'])返回所有用户,每个packagesUser::whereHas('userpackages', 'some condition')返回一些用户,每个packagesUser::(['userpackages' => 'some condition'])->whereHas('userpackages', 'some condition')返回一些用户,每个用户返回一些包。https://stackoverflow.com/questions/70266880
复制相似问题