所有模型均需要放置在application\common\model目录下,以便各个模块使用
所有模型均要继承\app\common\model\Common模型,如:
~~~
<?php
namespace app\common\model;
/**
* 测试模型
*/
class Test extends Common
{
public function test(){}
}
~~~
所有模型默认具有以下通用方法
## 列表通用模型方法
```
/**
* 通用查询列表方法
* @param $post
* @return mixed
* @throws \think\exception\DbException
*/
public function tableData($post)
{
if(isset($post['limit'])){
$limit = $post['limit'];
}else{
$limit = config('paginate.list_rows');
}
$tableWhere = $this->tableWhere($post);
$list = $this->field($tableWhere['field'])->where($tableWhere['where'])->order($tableWhere['order'])->paginate($limit);
$data = $this->tableFormat($list->getCollection()); //返回的数据格式化,并渲染成table所需要的最终的显示数据类型
$re['code'] = 0;
$re['msg'] = '';
$re['count'] = $list->total();
$re['data'] = $data;
return $re;
}
```
```
/**
* 根据输入的查询条件,返回所需要的where
* @author sin
* @param $post
* @return mixed
*/
protected function tableWhere($post)
{
$result['where'] = [];
$result['field'] = "*";
$result['order'] = [];
return $result;
}
/**
* 数据查询后格式化方法
* @param $list
* @return mixed
*/
protected function tableFormat($list)
{
return $list;
}
```
## 软删除
模型文件中需要增加以下定义:
```
use SoftDelete;
//软删除标记字段
protected $deleteTime = 'isdel';
```
定义好之后,即可使用以下方法对数据进行软删除
```
// 软删除
User::destroy(1);
// 真实删除
User::destroy(1,true);
$user = User::get(1);
// 软删除
$user->delete();
// 真实删除
$user->delete(true);
```
## 添加更新时间自动填充
```
protected $autoWriteTimestamp = true;
//创建时间
protected $createTime = 'ctime';
//更新时间
protected $updateTime = 'utime';
```
## 数据库表文件定义规范
1. 有自增主键的表,主键建议使用id 作为表主键名称,其它地方表中调用该表主键时为 “表名_id”
2. 创建时间统一为 ctime
3. 更新时间统一为 utime
4. 软删除标记字段统一为 isdel
5. 类型字段,例如:性别、状态等建议使用tinyint类型
6. 表排序规则统一为:utf8mb4_general_ci
7. 所有表使用InnoDB作为数据库引擎
>[danger] 表中定义的类型,建议都在模型中以常量的形式定义出来,例如:
> const MARKETABLE_UP = 1; //上架
const MARKETABLE_DOWN = 2;//下架
const VIRTUAL_YES = 2;//虚拟商品
const VIRTUAL_NO = 1;//普通商品
在使用时尽量避免直接使用1、2、3这样的数字,尽量使用 模型::常量进行调用,例如
self::MARKETABLE_DOWN
或
$goodsModel = new Goods();
$goodsModel::MARKETABLE_DOWN