CSpeed v2.1.8 特性:
1、配置文件变更:
[db] db.mater.type = mysql ; 数据库类型,默认:mysql db.mater.host = localhost ; 数据库主机地址 db.mater.port = 3306 ; 数据库端口 db.mater.dbname = cspeed ; 数据库名称 db.mater.username = cspeed ; 数据库用户名 db.mater.password = cspeed ; 数据库密码
新版本配置文件:
[db] db.master.dsn = 'mysql:host=localhost;port=3306;dbname=supjos' ; 数据库类型,默认:mysql db.master.username = root ; 数据库用户名 db.master.password = 3333 ; 数据库密码
变更的主要原因在与使用PDO形式的dsn,能够更好的兼容各种数据库:Oracle、Pg、SqlServer等
2、增加支持多数据库配置链接与切换:
$di->set('db1', function(){ /* 省略任何参数表示从ini配置文件获取 */ return new \Cs\db\pdo\Adapter(); }); $di->set('db2', function(){ /* 省略的参数系统自动从ini配置文件获取 */ return new \Cs\db\pdo\Adapter([ 'dsn' => 'mysql:host=localhost;port=3308;dbname=product', 'username' => 'root', 'password' => 'root' ]); });
如上配置了两个数据库链接,如果在使用模型的过程中需要进行切换,可以使用模型的方法:
/* 表示当前模型操作```db2```数据库 */ $model->setDb('db2'); /* 表示当前模型操作```db1```数据库 */ $model->setDb('db1');
更加方便的方式是在模型的构造函数中使用本方法:
<?php namespace app\models; class User extends \Cs\mvc\Model { public function __construct() { $this->on(User::EVENT_BEFORE_SAVE, [$this, 'beforeSave']); $this->setDb('db2'); } function beforeSave() { echo "BeforeSave <br>"; } public function tableName() { return 'www_product'; } }
注意:\Cs\db\pdo\Adapter类本身就表示一个数据库链接,故\Cs\db\pdo\Adapter不支持数据库切换,用户可以直接使用\Cs\db\pdo\Adapter进行数据库的操作,CSpeed引擎的\Cs\mvc\Model本身就是基于\Cs\db\pdo\Adapter进行的二次封装.
可以直接使用 \Cs\db\pdo\Adapter 分别操作数据库:
$db1 = $this->di->get('db1'); $db1->query('UPDATE xxx FROM xxx SET xx=xx'); $db1->execute();
或者使用预处理:
$db1 = $this->di->get('db1'); $db1->query('UPDATE xxx FROM xxx SET xx=?', [99]); /* 或者如下的绑定名 */ $db1->query('UPDATE xxx FROM xxx SET id=:id', [‘id’ => 99]); $db1->execute();
引用来自“状元小探花”的评论
@JosinWO 不要浪费时间开发这类框架了。。。如果技术好,可以考虑一下怎么把 Swoole 的 MySQL 协程客户端,整合到 Phalcon 框架的 ORM 层面。
引用来自“CCcccccccC”的评论
什么是全堆栈引用来自“简单有效”的评论
不是内存使用的堆栈,全栈是它指实现了很多的功能, 基本上不需要再依赖其他的库.
引用来自“CCcccccccC”的评论
什么是全堆栈全栈是它指实现了很多的功能, 基本上不需要再依赖其他的库.
如果技术好,可以考虑一下怎么把 Swoole 的 MySQL 协程客户端,整合到 Phalcon 框架的 ORM 层面。