BaseRepository.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. <?php
  2. namespace App\Module\Team\Repositorys;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\DB;
  5. /**
  6. * 基础仓库类
  7. *
  8. * 提供基本的数据访问和操作功能,所有具体的仓库类都继承自此类。
  9. * 该类主要用于后台管理控制器,提供数据的CRUD操作。
  10. */
  11. class BaseRepository
  12. {
  13. /**
  14. * 模型实例
  15. *
  16. * @var Model
  17. */
  18. protected $model;
  19. /**
  20. * 构造函数
  21. *
  22. * @param Model $model
  23. */
  24. public function __construct(Model $model)
  25. {
  26. $this->model = $model;
  27. }
  28. /**
  29. * 获取所有记录
  30. *
  31. * @param array $columns 要获取的字段
  32. * @return \Illuminate\Database\Eloquent\Collection
  33. */
  34. public function all(array $columns = ['*'])
  35. {
  36. return $this->model->all($columns);
  37. }
  38. /**
  39. * 分页获取记录
  40. *
  41. * @param int $perPage 每页数量
  42. * @param array $columns 要获取的字段
  43. * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator
  44. */
  45. public function paginate(int $perPage = 15, array $columns = ['*'])
  46. {
  47. return $this->model->paginate($perPage, $columns);
  48. }
  49. /**
  50. * 根据ID获取记录
  51. *
  52. * @param int $id 记录ID
  53. * @param array $columns 要获取的字段
  54. * @return Model|null
  55. */
  56. public function find(int $id, array $columns = ['*'])
  57. {
  58. return $this->model->find($id, $columns);
  59. }
  60. /**
  61. * 根据条件获取第一条记录
  62. *
  63. * @param array $conditions 查询条件
  64. * @param array $columns 要获取的字段
  65. * @return Model|null
  66. */
  67. public function findBy(array $conditions, array $columns = ['*'])
  68. {
  69. $query = $this->model->query();
  70. foreach ($conditions as $field => $value) {
  71. $query->where($field, $value);
  72. }
  73. return $query->first($columns);
  74. }
  75. /**
  76. * 根据条件获取多条记录
  77. *
  78. * @param array $conditions 查询条件
  79. * @param array $columns 要获取的字段
  80. * @return \Illuminate\Database\Eloquent\Collection
  81. */
  82. public function findAllBy(array $conditions, array $columns = ['*'])
  83. {
  84. $query = $this->model->query();
  85. foreach ($conditions as $field => $value) {
  86. $query->where($field, $value);
  87. }
  88. return $query->get($columns);
  89. }
  90. /**
  91. * 创建记录
  92. *
  93. * @param array $data 记录数据
  94. * @return Model
  95. */
  96. public function create(array $data)
  97. {
  98. return $this->model->create($data);
  99. }
  100. /**
  101. * 更新记录
  102. *
  103. * @param int $id 记录ID
  104. * @param array $data 记录数据
  105. * @return bool
  106. */
  107. public function update(int $id, array $data)
  108. {
  109. $record = $this->find($id);
  110. if (!$record) {
  111. return false;
  112. }
  113. return $record->update($data);
  114. }
  115. /**
  116. * 删除记录
  117. *
  118. * @param int $id 记录ID
  119. * @return bool
  120. */
  121. public function delete(int $id)
  122. {
  123. $record = $this->find($id);
  124. if (!$record) {
  125. return false;
  126. }
  127. return $record->delete();
  128. }
  129. /**
  130. * 批量删除记录
  131. *
  132. * @param array $ids 记录ID数组
  133. * @return int 删除的记录数
  134. */
  135. public function deleteMultiple(array $ids)
  136. {
  137. return $this->model->whereIn('id', $ids)->delete();
  138. }
  139. /**
  140. * 获取记录总数
  141. *
  142. * @param array $conditions 查询条件
  143. * @return int
  144. */
  145. public function count(array $conditions = [])
  146. {
  147. $query = $this->model->query();
  148. foreach ($conditions as $field => $value) {
  149. $query->where($field, $value);
  150. }
  151. return $query->count();
  152. }
  153. /**
  154. * 执行原生SQL查询
  155. *
  156. * @param string $query SQL查询语句
  157. * @param array $bindings 绑定参数
  158. * @return array
  159. */
  160. public function rawQuery(string $query, array $bindings = [])
  161. {
  162. return DB::select($query, $bindings);
  163. }
  164. }