初始化本地仓库
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
---
|
||||
name: backend-gen-dao
|
||||
description: Generate DAO class. Only needs setModel() and optional getKeywordFields(). BaseDao provides all CRUD methods.
|
||||
globs:
|
||||
- "app/dao/**/*.php"
|
||||
- "plugin/**/app/dao/**/*.php"
|
||||
---
|
||||
|
||||
# DAO 生成规范
|
||||
|
||||
## 原则
|
||||
|
||||
**DAO 只需定义 `setModel()`,其他方法全部使用 BaseDao 基类!**
|
||||
|
||||
当前项目真实约定补充:
|
||||
|
||||
- 必须显式导入 `use core\base\BaseDao;`,不能只写 `extends BaseDao`。
|
||||
- `getKeywordFields()` 优先定义为 `protected`。
|
||||
- 如无必要,不要重写 `selectList()`。
|
||||
- 如确需重写 `selectList()` 以补 `with` 或默认排序,方法签名必须与当前项目 `BaseDao` 保持一致。
|
||||
|
||||
BaseDao 提供的方法:
|
||||
- `selectList()` - 分页查询
|
||||
- `get()` / `getOne()` - 获取单条
|
||||
- `save()` / `saveAll()` - 创建/批量创建
|
||||
- `update()` / `batchUpdate()` - 更新/批量更新
|
||||
- `delete()` / `destroy()` - 删除
|
||||
- `count()` / `getCount()` - 计数
|
||||
- `value()` / `getColumn()` - 获取字段值
|
||||
- `search()` - 搜索
|
||||
- `sum()` / `getMax()` / `getMin()` - 统计
|
||||
- `transaction()` - 事务
|
||||
|
||||
## 文件位置
|
||||
|
||||
**App:**
|
||||
```
|
||||
app/dao/{module}/{Model}Dao.php
|
||||
```
|
||||
|
||||
**Plugin:**
|
||||
```
|
||||
plugin/{Plugin}/app/dao/{module}/{Model}Dao.php
|
||||
```
|
||||
|
||||
## DAO 模板
|
||||
|
||||
```php
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
*+------------------
|
||||
* madong
|
||||
*+------------------
|
||||
* Copyright (c) https://gitee.com/motion-code All rights reserved.
|
||||
*+------------------
|
||||
* Author: Mr. April (405784684@qq.com)
|
||||
*+------------------
|
||||
*/
|
||||
|
||||
namespace {ns}\dao\{module};
|
||||
|
||||
use {model_ns}\{module}\{Model};
|
||||
use core\base\BaseDao;
|
||||
|
||||
/**
|
||||
* {Model}数据访问层
|
||||
*/
|
||||
class {Model}Dao extends BaseDao
|
||||
{
|
||||
protected function setModel(): string
|
||||
{
|
||||
return {Model}::class;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 重写 `selectList()` 的正确方式
|
||||
|
||||
仅在需要追加固定关联加载或默认排序时重写,例如:
|
||||
|
||||
```php
|
||||
public function selectList(
|
||||
array $where,
|
||||
string|array $field = '*',
|
||||
int $page = 0,
|
||||
int $limit = 0,
|
||||
string $order = '',
|
||||
array $with = [],
|
||||
bool $search = false,
|
||||
?array $withoutScopes = null
|
||||
): ?Collection {
|
||||
$with = array_unique(array_merge($with, ['relationA', 'relationB']));
|
||||
$order = $order ?: 'sort asc, id desc';
|
||||
|
||||
return parent::selectList($where, $field, $page, $limit, $order, $with, $search, $withoutScopes);
|
||||
}
|
||||
```
|
||||
|
||||
不要写成旧签名,例如缺少 `string|array $field`、`$search`、`$withoutScopes` 等参数,否则容易在运行时与项目当前基类不兼容。
|
||||
|
||||
## 可选配置
|
||||
|
||||
### 关键词搜索字段
|
||||
|
||||
```php
|
||||
protected function getKeywordFields(): array
|
||||
{
|
||||
return ['name', 'title'];
|
||||
}
|
||||
```
|
||||
|
||||
## 调用示例
|
||||
|
||||
```php
|
||||
// 注入 Service 后,Service 通过 __call 自动代理到 DAO
|
||||
$list = $this->dao->selectList($where, '*', $page, $limit);
|
||||
$item = $this->dao->get($id);
|
||||
$count = $this->dao->count($where);
|
||||
$this->dao->save($data);
|
||||
$this->dao->update($id, $data);
|
||||
$this->dao->delete($id);
|
||||
```
|
||||
|
||||
## 生成检查清单
|
||||
|
||||
- [ ] 命名空间正确(App/Plugin)
|
||||
- [ ] 引入 BaseDao
|
||||
- [ ] 引入 Model 类
|
||||
- [ ] 实现 `setModel()` 返回模型类名
|
||||
- [ ] 可选:定义 `getKeywordFields()` 搜索字段
|
||||
- [ ] 若重写 `selectList()`,签名与当前项目 `BaseDao` 完全一致
|
||||
Reference in New Issue
Block a user