FarmLandRepository.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Module\Farm\Repositories;
  3. use App\Module\Farm\Models\FarmLand;
  4. use Dcat\Admin\Repositories\EloquentRepository;
  5. use Illuminate\Database\Eloquent\Collection;
  6. /**
  7. * 土地信息仓库
  8. *
  9. * 提供土地信息数据的访问和操作功能。
  10. * 该类是土地信息模块与后台管理系统的桥梁,用于处理土地信息数据的CRUD操作。
  11. */
  12. class FarmLandRepository extends EloquentRepository
  13. {
  14. /**
  15. * 模型类名
  16. *
  17. * @var string
  18. */
  19. protected $eloquentClass = FarmLand::class;
  20. /**
  21. * 更新数据
  22. *
  23. * 重写父类方法,确保status字段被正确处理
  24. *
  25. * @param \Dcat\Admin\Form $form
  26. * @return bool
  27. */
  28. public function update(\Dcat\Admin\Form $form)
  29. {
  30. $model = $this->model();
  31. if (!$model->getKey()) {
  32. $model->exists = true;
  33. $model->setAttribute($model->getKeyName(), $form->getKey());
  34. }
  35. $result = null;
  36. \Illuminate\Support\Facades\DB::transaction(function () use ($form, $model, &$result) {
  37. $updates = $form->updates();
  38. // 获取关联关系数据,但不处理它们
  39. [$relations, $relationKeyMap] = $this->getRelationInputs($model, $updates);
  40. if ($relations) {
  41. $updates = \Illuminate\Support\Arr::except($updates, array_keys($relationKeyMap));
  42. }
  43. // 确保status是整数
  44. if (isset($updates['status'])) {
  45. $updates['status'] = (int)$updates['status'];
  46. }
  47. foreach ($updates as $column => $value) {
  48. $model->setAttribute($column, $value);
  49. }
  50. $result = $model->update();
  51. // 我们不调用updateRelation方法,因为它可能会导致错误
  52. // 土地模型没有复杂的关联关系需要在表单中更新
  53. });
  54. return $result;
  55. }
  56. }