本文共 3832 字,大约阅读时间需要 12 分钟。
在MixPHP框架中,我们对数据库操作进行了封装,简化了代码的复杂度。以下是数据库操作的详细流程说明。
MixPHP的数据库操作基于一个抽象类BaseModel
,提供了标准化的数据库操作方法。主要属性包括:
table
:当前操作的数据表名称field
:当前查询的字段join
:关联表查询片段where
:条件查询片段order
:排序片段group
:分组片段having
:分组条件片段limit
:分页片段param
:数据绑定参数数组表单初始化
在类的构造方法中,调用setTable()
方法,初始化当前操作的数据表。字段设置
使用field()
方法设置当前查询字段,支持单字段或多字段查询。关联表查询
使用join()
方法进行关联表查询,支持多种连接类型和字段映射。条件查询
where()
方法用于设置查询条件,支持单个条件或多个条件组合,自动处理参数绑定。或条件查询
orWhere()
方法用于或条件查询,适用于多个条件结合使用。范围查询
betweenWhere()
方法用于范围查询,支持单个或多个字段的范围条件。字段集合查询
whereIn()
方法用于字段集合查询,支持多个值的查询,设置查询连接方式。排序和分组
order()
、group()
、having()
方法用于设置排序、分组和分组条件。分页操作
page()
方法用于分页操作,支持传递当前页码、每页数量和状态。SQL语句构建
selectSql()
方法用于构建完整的SQL语句,结合所有配置参数。执行操作
select()
方法用于执行查询操作,返回结果集合或单个数据。数据操作
find()
、value()
方法用于获取单个数据记录,count()
方法用于统计数据记录数。数据增删改
insert()
、update()
、delete()
方法用于数据的增删改操作。参数清除
clear()
方法用于清除当前操作的所有配置参数,重置为初始状态。创建数据库操作类
在common/models/database
目录下创建对应的数据库操作类,继承BaseModel
。例如,用户数据表操作类UserModel
:namespace apps\common\models\database;use mix\facades\PDO;class UserModel extends BaseModel{ const TABLE = 'user'; public function table() { return self::TABLE; }}
在验证器中使用数据库操作
在API模块的验证器中引入数据库操作模型,例如UserForm
:namespace apps\api\models;use mix\validators\Validator;use apps\common\models\database\UserModel;class UserForm extends Validator{ public function model() { return (new UserModel()); } public function rules() { return [ 'id' => ['call', 'callback' => [$this, 'mustBeId']], 'email' => ['email', 'length' => 10, 'minLength' => 3, 'maxLength' => 50], 'age' => ['integer', 'unsigned' => true, 'min' => 1, 'max' => 120] ]; } public function scenarios() { return [ 'index' => ['required' => ['id'], 'optional' => ['email', 'age']] ]; } public function messages() { return [ 'id.callback' => 'id参数错误' ]; } public function mustBeId($id) { if (!$id || !$this->model()->find($id)) { return false; } return true; }}
在控制器中执行操作
在API控制器中调用数据库操作模型进行具体数据处理。例如,UserController
:namespace apps\api\controllers;use mix\facades\Request;use apps\api\models\UserForm;class UserController extends BaseController{ protected $data; protected $model; protected $validate; public function onConstruct() { parent::onConstruct(); $this->validate = new UserForm(); $this->model = $this->validate->model(); $this->data = Request::getRawBody(); } protected function responseError($code, $msg) { return [ 'code' => $code, 'msg' => $msg ]; } protected function responseOk($data = []) { return [ 'code' => 200, 'msg' => 'Ok', 'data' => $data ]; } public function actionIndex() { $data = $this->vali('index'); if (!$data) { return $this->responseError(-1, 'json参数错误'); } $info = $this->model()->find($data['id']); return $this->responseOk($info); }}
验证器场景设置:setScenario()
方法需要修改,具体修改地址为/vendor/mixstart/mixphp-framework/src/validators/Validator.php
,修改内容如下:
public function setScenario($scenario){ $scenarios = $this->scenarios(); if (!isset($scenarios[$scenario])) { throw new \mix\exceptions\ValidatorException("场景不存在:{$scenario}"); } if (!isset($scenarios[$scenario]['required'])) { throw new \mix\exceptions\ValidatorException("场景 {$scenario} 未定义 required 选项"); } if (!isset($scenarios[$scenario]['optional'])) { $scenarios[$scenario]['optional'] = []; } $this->scenario = $scenarios[$scenario]; return $this;}
数据库查询优化:在实际使用中,建议合理使用索引和查询优化技术,避免冗余查询,提升数据库性能。
参数绑定安全性:注意数据库参数绑定,避免直接将用户输入嵌入到SQL语句中,确保数据安全性。
通过以上步骤,可以清晰地看到数据库操作的完整流程,如何通过MixPHP框架对数据库进行标准化操作,提升代码的可读性和维护性。
转载地址:http://kuffk.baihongyu.com/