请教一个hasMany加条件的问题

$all = Sale::select('province','channel','area')->groupBy('province', 'channel', 'area')->with('provinces')->get()->toArray();

怎么样才能在 with('provinces') 里面使用前面 groupBy 得到的结果加多一个限制条件如

with(['provinces'=>funtion($query){
    $query->where(....)
}]) 

Sale 模型的

public function provinces(){
    return $this->hasMany(Sale::class,'province','province');
}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

你中间那段代码不就是你要问的答案吗?或者你问的是别的问题?

2年前 评论
wdnmd 2年前
OneLove (楼主) 2年前
荒街! (作者) 2年前
OneLove (楼主) 2年前
讨论数量: 3

你中间那段代码不就是你要问的答案吗?或者你问的是别的问题?

2年前 评论
wdnmd 2年前
OneLove (楼主) 2年前
荒街! (作者) 2年前
OneLove (楼主) 2年前

如果是一条记录,那先拿到主表结果再使用load方法,load的时候加上查询条件 如果是多条记录,那只能mysql层面使用join或者子查询

2年前 评论
OneLove (楼主) 2年前
随波逐流

我这个是一对多条件查询, 不知道是不是你要的那种

$users = User::with([
            'history' => function (HasMany $query) use ($date, $source) {
                $query->where('number', '>', 0);
                $query->where('status', '=', UserHistory::STATUS_FINISH);
                $query->whereBetween('created_at', [Carbon::parse($date[0]), Carbon::parse($date[1])]);
                switch ($source) {
                    case -2:// 全部
                        break;
                    case 0: // 八大体系
                        $query->whereNotNull('rule_id');
                        break;
                    case 1: // 其他
                        $query->whereNull('rule_id');
                        break;
                }
            },
            'department:id,name'
        ])
            ->whereIn('role', [User::ROLE_BORDER, User::ROLE_POLICE])
            ->whereIn('department_id', $departmentIds)
            ->paginate(request('limit'));
2年前 评论
OneLove (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!