请教一个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');
}
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

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

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

如果是一条记录,那先拿到主表结果再使用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年前

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

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

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