GameConditionItem.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. <?php
  2. namespace App\Module\Game\Models;
  3. use App\Module\Game\Enums\CONDITION_OPERATOR;
  4. use App\Module\Game\Enums\CONDITION_TYPE;
  5. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  6. use UCore\ModelCore;
  7. /**
  8. * 条件项
  9. *
  10. * field start
  11. * @property int $id 主键
  12. * @property int $group_id 条件组ID,外键关联game_condition_groups表
  13. * @property int $condition_type 条件类型(1:土地等级, 2:房屋等级, 3:宠物等级, 4:物品持有数, 5:代币持有数)
  14. * @property int $target_id 目标ID(土地类型ID、宠物ID、物品ID、代币ID等,根据condition_type解释)
  15. * @property int $operator 比较运算符(1:等于, 2:不等于, 3:大于, 4:大于等于, 5:小于, 6:小于等于)
  16. * @property int $value 比较值
  17. * @property int $param1 参数1(根据condition_type不同含义)
  18. * @property int $param2 参数2(根据condition_type不同含义)
  19. * @property array $extra_data 额外数据(JSON格式,可存储特定条件类型的额外参数)
  20. * @property \Carbon\Carbon $created_at 创建时间
  21. * @property \Carbon\Carbon $updated_at 更新时间
  22. * field end
  23. */
  24. class GameConditionItem extends ModelCore
  25. {
  26. /**
  27. * 与模型关联的表名
  28. *
  29. * @var string
  30. */
  31. protected $table = 'game_condition_items';
  32. // attrlist start
  33. protected $fillable = [
  34. 'id',
  35. 'group_id',
  36. 'condition_type',
  37. 'target_id',
  38. 'operator',
  39. 'value',
  40. 'param1',
  41. 'param2',
  42. 'extra_data',
  43. ];
  44. // attrlist end
  45. /**
  46. * 应该被转换为原生类型的属性
  47. *
  48. * @var array
  49. */
  50. protected $casts = [
  51. 'condition_type' => 'integer',
  52. 'target_id' => 'integer',
  53. 'operator' => 'integer',
  54. 'value' => 'integer',
  55. 'param1' => 'integer',
  56. 'param2' => 'integer',
  57. 'extra_data' => 'json',
  58. ];
  59. /**
  60. * 获取条件项所属的条件组
  61. *
  62. * @return BelongsTo
  63. */
  64. public function conditionGroup(): BelongsTo
  65. {
  66. return $this->belongsTo(GameConditionGroup::class, 'group_id', 'id');
  67. }
  68. /**
  69. * 获取条件类型名称
  70. *
  71. * @return string
  72. */
  73. public function getConditionTypeName(): string
  74. {
  75. return CONDITION_TYPE::getName($this->condition_type);
  76. }
  77. /**
  78. * 获取比较运算符名称
  79. *
  80. * @return string
  81. */
  82. public function getOperatorName(): string
  83. {
  84. return CONDITION_OPERATOR::getName($this->operator);
  85. }
  86. /**
  87. * 获取比较运算符符号
  88. *
  89. * @return string
  90. */
  91. public function getOperatorSymbol(): string
  92. {
  93. return CONDITION_OPERATOR::getSymbol($this->operator);
  94. }
  95. /**
  96. * 获取条件描述
  97. *
  98. * @return string
  99. */
  100. public function getDescription(): string
  101. {
  102. $typeName = $this->getConditionTypeName();
  103. $operatorSymbol = $this->getOperatorSymbol();
  104. $targetName = $this->getTargetName();
  105. return "{$typeName} {$targetName} {$operatorSymbol} {$this->value}";
  106. }
  107. /**
  108. * 获取目标名称
  109. *
  110. * @return string
  111. */
  112. public function getTargetName(): string
  113. {
  114. return \App\Module\Game\Services\ConditionTypeDescriptor::getTargetNameFromModel($this);
  115. }
  116. }