ModelRelatedValidator.php 1001 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <?php
  2. namespace UCore\Validator;
  3. use UCore\Validator;
  4. /**
  5. * 模型关联验证器
  6. *
  7. * 用于验证指定值在模型中是否存在关联记录
  8. */
  9. class ModelRelatedValidator extends Validator
  10. {
  11. /**
  12. * 验证模型关联
  13. *
  14. * @param mixed $value 要验证的值
  15. * @param array $data 所有验证数据
  16. * @return bool 验证是否通过
  17. */
  18. public function validate(mixed $value, array $data): bool
  19. {
  20. $list = $this->args;
  21. foreach ($list as $modelClass => $field) {
  22. /**
  23. * @var \Illuminate\Database\Eloquent\Builder $query
  24. */
  25. $query = $modelClass::query();
  26. $record = $query->where($field, '=', $value)->first();
  27. if ($record) {
  28. $modelName = $modelClass::$NAME ?? $modelClass;
  29. $this->addError("值 {$value} 在 {$modelName} 中已存在关联记录");
  30. return false;
  31. }
  32. }
  33. return true;
  34. }
  35. }