ValueController.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. <?php
  2. declare(strict_types=1);
  3. namespace SixShop\eav\Controller;
  4. use SixShop\Core\Helper;
  5. use SixShop\Core\Request;
  6. use SixShop\eav\Entity\EvaValueEntity;
  7. use SixShop\eav\Model\EvaAttributeModel;
  8. use think\Response;
  9. class ValueController
  10. {
  11. /**
  12. * 查询指定实体的所有属性值
  13. * GET /eav/value?entity_type_id=1&entity_id=123
  14. */
  15. public function index(Request $request, EvaValueEntity $entity): Response
  16. {
  17. $entityTypeId = $request->get('entity_type_id/d');
  18. $entityId = $request->get('entity_id/d');
  19. if (!$entityTypeId || !$entityId) {
  20. return Helper::error_response('参数缺失');
  21. }
  22. // 查询该实体的所有属性值
  23. $list = $entity->where([
  24. 'entity_id' => $entityId
  25. ])->select();
  26. return Helper::success_response($list);
  27. }
  28. /**
  29. * 保存/更新指定实体的属性值
  30. * POST /eav/value
  31. * body: [
  32. * { "entity_id": 123, "entity_type_id": 1, "attribute_id": 2, "value": "红色" }
  33. * ]
  34. */
  35. public function save(Request $request, EvaValueEntity $entity): Response
  36. {
  37. $data = $request->post();
  38. if (empty($data) || !is_array($data)) {
  39. return Helper::error_response('参数错误');
  40. }
  41. // 支持批量写入
  42. foreach ($data as $item) {
  43. if (
  44. empty($item['entity_id']) ||
  45. empty($item['attribute_id']) ||
  46. !isset($item['value'])
  47. ) {
  48. continue;
  49. }
  50. // 获取属性类型
  51. $attr = EvaAttributeModel::find($item['attribute_id']);
  52. if (!$attr) {
  53. continue;
  54. }
  55. $saveData = [
  56. 'entity_id' => $item['entity_id'],
  57. 'attribute_id' => $item['attribute_id'],
  58. ];
  59. switch ($attr->backend_type) {
  60. case 'int':
  61. $saveData['value_int'] = intval($item['value']);
  62. break;
  63. case 'decimal':
  64. $saveData['value_decimal'] = floatval($item['value']);
  65. break;
  66. case 'text':
  67. $saveData['value_text'] = $item['value'];
  68. break;
  69. case 'varchar':
  70. default:
  71. $saveData['value_varchar'] = $item['value'];
  72. }
  73. // 先查找是否已存在,存在则更新,否则新增
  74. $exist = $entity->where([
  75. 'entity_id' => $item['entity_id'],
  76. 'attribute_id' => $item['attribute_id']
  77. ])->find();
  78. if ($exist) {
  79. $entity->where('id', $exist['id'])->update($saveData);
  80. } else {
  81. $entity->save($saveData);
  82. }
  83. }
  84. return Helper::success_response('保存成功');
  85. }
  86. /**
  87. * 删除指定实体的所有属性值
  88. * DELETE /eav/value?entity_id=123
  89. */
  90. public function delete(Request $request, EvaValueEntity $entity): Response
  91. {
  92. $entityId = $request->get('entity_id/d');
  93. if (!$entityId) {
  94. return Helper::error_response('参数缺失');
  95. }
  96. $entity->where(['entity_id' => $entityId])->delete();
  97. return Helper::success_response('删除成功');
  98. }
  99. }