resloveData($data); $validate = $this->validate($data); if ($validate !== true) { $this->setError($validate); return false; } $model = $this->modelName::create($data); // 绑定店长 Employee::where('id', $data['master_id'])->update(['store_id' => $model->id]); return true; } public function update($primaryKey, $data): bool { $model = $this->query()->whereKey($primaryKey)->firstOrFail(); $data = $this->resloveData($data, $model); $validate = $this->validate($data, $model); if ($validate !== true) { $this->setError($validate); return false; } // 还原以前的店长 if (isset($data['master_id']) && $model->master_id != $data['master_id']) { Employee::where('id', $model->master_id)->update(['store_id' => 0]); } return $model->update($data); } public function resloveData($data, $model = null) { if (isset($data['location'])) { $data['lon'] = data_get($data['location'], 'lng'); $data['lat'] = data_get($data['location'], 'lat'); $data['address'] = data_get($data['location'], 'address'); } return $data; } public function validate($data, $model = null) { $createRules = [ 'title' => ['required'], 'master_id' => ['required', Rule::unique('stores', 'master_id')], 'category_id' => ['required'], 'business_id' => ['required'], 'level_id' => ['required'], 'region' => ['required'], 'lon' => ['required'], 'lat' => ['required'], 'profit_ratio' => ['required', 'numeric', 'min:0', 'max:100'], ]; $updateRules = [ 'master_id' => [Rule::unique('stores', 'master_id')->ignore($model, 'master_id')], ]; $validator = Validator::make($data, $model ? $updateRules : $createRules, [ 'master_id.unique' => '已经是店长了', ]); if ($validator->fails()) { return $validator->errors()->first(); } return true; } public function preDelete(array $ids): void { // 修改员工关联 Employee::whereIn('store_id', $ids)->update(['store_id' => 0]); } }