load('devices'); switch($region->type) { case MonitorMode::TYPE_MONITOR: case MonitorMode::TYPE_AIR: case MonitorMode::TYPE_ATOMIZING: case MonitorMode::TYPE_INSECT: $region->offsetSet('picker_devices', $region->devices->pluck('id')->toArray()); break; case MonitorMode::TYPE_SOIL: case MonitorMode::TYPE_WATER_QUALITY: case MonitorMode::TYPE_METEOROLOGICAL: $region->offsetSet('array_devices', $region->devices->map(function($item, $key){ return [ 'device_id' => $item->id, 'device_fields' => explode(',', $item->pivot->fields ?? ''), ]; })); break; } return $region; } public function saveDevices($primaryKey, $params){ $model = $this->query()->whereKey($primaryKey)->first(); $type = $params['type'] ?? null; $syncData = []; switch($type){ case MonitorMode::TYPE_MONITOR: case MonitorMode::TYPE_AIR: case MonitorMode::TYPE_ATOMIZING: case MonitorMode::TYPE_INSECT: $syncData = $params['picker_devices'] ?? []; break; case MonitorMode::TYPE_SOIL: case MonitorMode::TYPE_WATER_QUALITY: case MonitorMode::TYPE_METEOROLOGICAL: $arrayDevices = $params['array_devices'] ?? []; if($arrayDevices){ foreach($arrayDevices as $arrayDevice){ //过滤重复设备 if(isset($syncData[$arrayDevice['device_id']])){ return $this->setError('请勿重复选择监测设备'); } $syncData[$arrayDevice['device_id']] = [ 'fields' => $arrayDevice['device_fields'] ]; } } break; } return $model->devices()->sync($syncData); } }