repository 属性(BaseRepository 子类) * 重写 doSelect / doUpdate / doDelete,走 Repository 的 scopedQuery */ trait WithDataPermission { /** * 查询 - 以 repository->scopedQuery() 为基础,注入 withDataPermission */ protected function doSelect(array $where, ?string $field = null, string $order = 'desc') { $model = $this->repository->scopedQuery(); foreach ($where as $column => $value) { if (is_array($value)) { if ($value[0] === 'like' || $value[0] === 'not like') { $model = $model->where($column, $value[0], "%$value[1]%"); } elseif (in_array($value[0], ['>', '=', '<', '<>'])) { $model = $model->where($column, $value[0], $value[1]); } elseif ($value[0] == 'in' && !empty($value[1])) { $valArr = is_string($value[1]) ? explode(",", trim($value[1])) : $value[1]; $model = $model->whereIn($column, $valArr); } elseif ($value[0] == 'not in' && !empty($value[1])) { $valArr = is_string($value[1]) ? explode(",", trim($value[1])) : $value[1]; $model = $model->whereNotIn($column, $valArr); } elseif ($value[0] == 'null') { $model = $model->whereNull($column); } elseif ($value[0] == 'not null') { $model = $model->whereNotNull($column); } elseif ($value[0] !== '' || $value[1] !== '') { $model = $model->whereBetween($column, $value); } } else { $model = $model->where($column, $value); } } if ($field) { $model = $model->orderBy($field, $order); } return $model; } /** * 更新 - 带数据权限查找记录 */ protected function doUpdate($id, $data) { $model = $this->repository->findWithPermission($id); foreach ($data as $key => $val) { $model->{$key} = $val; } $model->save(); } /** * 删除 - 带数据权限 */ protected function doDelete(array $ids) { $this->repository->deleteWithPermission($ids); } }