公司框架采用了laravel的Eloquent用为数据库的orm
// 使用Manager管理数据库
use Illuminate\Database\Capsule\Manager as Db;
self::$db = new Db;
foreach($dbconfig as $connection_name => $config)
{
$db_arr = [
'driver' => $config['dbtype'] ?? 'mysql',
'host' => $config['host'],
'port' => $config['port'],
'database' => $config['dbname'],
'username' => $config['username'],
'password' => $config['password'],
'charset' => $config['charset'] ?? 'utf8',
'collation' => $config['collation'] ?? 'utf8_general_ci',
'prefix' => '',
];
self::$db->addConnection($db_arr,$connection_name);
}
// self::$db->setEventDispatcher(new Dispatcher(new Container));
// 设置fetch的方式
self::$db->setFetchMode(\PDO::FETCH_ASSOC);
self::$db->setAsGlobal();
self::$db->bootEloquent();
setAsGlobal更新instance对象
bootEloquent开始启用。
常用原生用法,使用connection类
query()
select()
cursor()
prepared()
getPdoForSelect()
unprepared()
run()
runQueryCallback()
logQuery()
getQueryLog()
Manger作为facade Db的使用
调用conneciton()
Manager::connection('default')->select("select * from test");
查看databae\PDO\Connection.php和databse\Conneciton查看实现的方法。
其实比较好用的游标,使用原生协程来跟进多数据fetch
另一个值得学习的databse\Eloquent\Model类,orm神器
可以查看出优美地调用__call和__callStatic
在databse\Eloquent\Builder可以发现更多orm的使用方法
例如
updateOrCreate
firstOrFail
查看源码,值得学习大神处理的逻辑。
基本上都是静态的方式调用
相对应有些失败之后还有重连的机制。
大概源码查看到此,基本上学习此源码,orm足够使用的了。