ModelPkValidator.php 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. <?php
  2. namespace UCore\Validator;
  3. use UCore\Exception\CodeException;
  4. use UCore\Exception\LogicException;
  5. use UCore\Validator;
  6. use Illuminate\Database\Eloquent\Model;
  7. /**
  8. * 模型主键查找验证器
  9. *
  10. * 用于验证模型主键是否存在,并可选择性地将找到的模型实例赋值给指定字段
  11. *
  12. * 使用示例:
  13. * ['id' => ['modelPk', User::class, 'user']] // 验证 id 是否存在,并将用户实例赋值给 user 字段
  14. */
  15. class ModelPkValidator extends Validator
  16. {
  17. /**
  18. * 验证模型主键是否存在
  19. *
  20. * @param mixed $value 要验证的主键值
  21. * @param array $data 所有验证数据
  22. * @return bool 验证是否通过
  23. * @throws LogicException 当模型类不存在时抛出
  24. */
  25. public function validate(mixed $value, array $data): bool
  26. {
  27. $model = $this->args[0];
  28. if (!is_subclass_of($model, Model::class)) {
  29. throw new LogicException("模型类 {$model} 不存在或不是有效的 Eloquent 模型");
  30. }
  31. $one = $model::find($value);
  32. $bol = $one !== null;
  33. if ($bol) {
  34. $field = $this->args[1];
  35. if ($field) {
  36. $this->validation->$field = $one;
  37. }
  38. return true;
  39. }
  40. return false;
  41. }
  42. }