ScanDoctorValidate 验证类的 checkDeviceBind 场景应用
$param = Request::instance()->param();
$validate = new ActivityValidate();
if ( !$validate->scene('checkSave')->check( $param ) )
{
return $this->errorResponse( $validate->getError() );
}
数据量少的数据表单列出来优化foreach数据库查询
$data = DeviceBuy::where('status','in',[1,2])
->where('scan_doctor_id',$user_info['id'])
->order('create_time desc')
->field('id,device_id,pay_type,status,create_time,buy_log_id,scale')
->select();
$column_id = !empty( $authList ) ? array_column($data,'id') : [];
$column_buy_log_id = !empty( $authList ) ? array_column($data,'buy_log_id') : [];
//数据量极少的表建议不进行whereIn查询,但是field里面必须有id索引字段
$device = DeviceModel::order('id desc')->field('id,name,cover')->select();
//转换索引 DeviceModel => DeviceBuy id => device_id
$new_device = [];
foreach ($device as $v){
$new_device[ $v['id'] ] = $v;
}
$device_bind = DeviceBind::where('device_buy_id','in',$column_id)->select();
//转换索引 以DeviceBind表的device_buy_id建索引;循环DeviceBuy表的时候判断 $device_bind[ $v['id'] ] 是否存在,若存在则是关联信息
$new_device_bind = [];
foreach ($device_bind as $v){
$new_device_bind[ $v['device_buy_id'] ] = $v;
}
$device_buy_log = DeviceBuyLog::where('id','in',$column_buy_log_id)->select();
//转换索引
$new_device_buy_log = [];
foreach ($device_buy_log as $v){
$new_device_buy_log[ $v['id'] ] = $v;
}
foreach ($data as $k => $v){
$device_attr = empty( $new_device[ $v['device_id'] ] ) ? [] : $new_device[ $v['device_id'] ];
if( $device_attr ){
$data[$k]['name'] = $device_attr['name'];
$data[$k]['cover'] = $device_attr['cover'];
}
$data[$k]['need_bind'] = empty( $new_device_bind[ $v['id'] ] ) ? true : false;
$data[$k]['buy_log_money'] = 0;
$devicebuylog = empty( $new_device_buy_log[ $v['buy_log_id'] ] ) ? [] : $new_device_buy_log[ $v['buy_log_id'] ];
if( $devicebuylog ){
$data[$k]['buy_log_money'] = $devicebuylog['money'];
$data[$k]['scale_one'] = $devicebuylog['scale_one'];
$data[$k]['scale_two'] = $devicebuylog['scale_two'];
}
}