Files
zimoyin 13fd9c5f0a init
2026-04-06 20:48:32 +08:00

67 lines
2.4 KiB
PHP

<?php
namespace plugin\admin\app\controller;
/**
* 需要数据权限的 Controller 使用此 Trait
* 要求 Controller 中有 $this->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);
}
}