首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有雄辩的关系回调函数的Laravel 5返回错误记录

具有雄辩的关系回调函数的Laravel 5返回错误记录
EN

Stack Overflow用户
提问于 2021-12-07 21:01:29
回答 1查看 463关注 0票数 0

这是用户模型

代码语言:javascript
复制
public function userpackages()
{
    return $this->hasMany('App\UserPackages');
}

尝试让用户包形成特定的月份和年份,但它返回所有记录。

代码语言:javascript
复制
$users = User::with(['team', 'userpackages' => function($package) use($month,$year) {
    $package->whereMonth('created_at', $month)->whereYear('created_at', $year);
}])->get();

抓取

代码语言:javascript
复制
foreach ($users as $key => $user) {
  $userpackages = $user->userpackages;
}
EN

回答 1

Stack Overflow用户

发布于 2021-12-07 22:25:46

如果我的理解是正确的,您正在过滤急切的负载,但是这不会影响返回的模型。您需要使用whereHas()重复筛选器,以限制返回的模型。此外,像whereDate()这样的函数可能效率很低,特别是当列被索引时。我建议在搜索日期范围时使用whereBetween()

代码语言:javascript
复制
$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'])返回所有用户,每个packages
  • User::whereHas('userpackages', 'some condition')返回一些用户,每个packages
  • User::(['userpackages' => 'some condition'])->whereHas('userpackages', 'some condition')返回一些用户,每个用户返回一些包。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70266880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档