damidevelopment / yii2-db-procedures
包含用于数据库存储过程/视图操作的模型扩展
Requires
- php: >=7.2
- yiisoft/yii2: ~2.0.0
README
此扩展为在Yii2应用程序中处理数据库存储过程/视图提供了一层。
它旨在与Yii2应用程序良好配合,但在适当的配置下,也可以用于其他框架。
需求
此项目的基本需求
- PHP 7.2.0。
存储过程
在应用程序中,每个存储过程都有自己的模型。存储过程模型必须实现接口 damidev\dbprocedures\models\IProcedure。为了更容易地处理存储过程,我们创建了抽象类 damidev\dbprocedures\models\Procedure。此类实现了 IProcedure,调用事件,定义场景。
每个存储过程模型都必须定义 Procedure::call() 并至少调用方法 Procedure::execute()。因为存储过程返回单个或多个对象,只有程序员知道这些信息。
因此,对于单行结果存储过程,我们实现了 damidev\dbprocedures\models\SimpleProcedure。对于多行,我们实现了 damidev\dbprocedures\models\MultiProcedure。还有 damidev\dbprocedures\models\PagnatedProcedure,它为 MultiProcedure 提供分页逻辑。
存储过程生命周期
当调用 Procedure::call() 时
-> call()
-> call execute(queryOne|queryAll)
-> set scenario to Procedure::PROCEDURE_CALL
-> call event beforeCall() -- used to modify (or validate) input attributes
-> db procedure exec
-> set scenario to previous one
-> call event afterCall($result) -- used to modify procedure result
<- $result
当调用 Procedure::callCount() 时
-> callCount()
-> set scenario to Procedure::PROCEDURE_COUNT
-> db count procedure exec
-> set scenario to previous one
<- $count
存储过程操作
扩展提供了现成的独立操作,这使得创建REST API等变得更加容易。
有 damidev\dbprocedures\actions\SimpleProcedureAction 用于查看/详细信息操作和 damidev\dbprocedures\actions\PaginatedProcedureAction 用于索引/列表/分页操作。