如何修改PHP Laravel代码输出status为0和4的提现记录?
解决Laravel查询多个提现状态记录的问题
要查询status为0和4的提现记录,你需要把原来的精确匹配查询改成多值匹配,同时可以优化用户查询避免性能问题,具体修改如下:
核心修改点
- 将
where(['status' => 0])替换为whereIn('status', [0, 4]):whereIn方法支持传入值数组,能匹配字段值在数组范围内的所有记录 - 优化用户信息查询:原代码循环中每次单独查询User会导致N+1数据库查询问题,建议用Laravel的关联预加载
with方法一次性加载所有关联用户
修改后的完整代码
public function getWithdraws(Request $request) { // 使用whereIn匹配status为0和4的记录,同时预加载关联的user模型 $data = Withdraw::whereIn('status', [0, 4]) ->with('user') ->latest('id') ->paginate(10); // 通过预加载的关联直接获取用户信息,避免循环查询 foreach ($data->items() as $key) { $key->name = $key->user->name; $key->balance = $key->user->balance; $key->verified = $key->user->verified; } return response(['success' => $data]); }
额外说明
需要确保你的Withdraw模型中已经定义了与User模型的关联关系,在Withdraw.php中添加:
public function user() { return $this->belongsTo(User::class); }
如果暂时不想用关联预加载,也可以仅修改查询条件保留原循环(不推荐,数据量大时性能较差):
// 仅修改查询条件,保留原循环逻辑 $data = Withdraw::whereIn('status', [0, 4])->latest('id')->paginate(10);
内容的提问来源于stack exchange,提问作者Neil
相关产品推荐
相关产品推荐

