apex / db
轻量级,直观的数据库接口
2.1
2023-10-20 08:27 UTC
Requires
- php: >=8.1
- doctrine/orm: ^2.16
- illuminate/database: ^10.28
- symfony/string: ^6.0
Requires (Dev)
- apex/signer: ^2.0
- phpunit/phpunit: ^9.5
Suggests
- apex/debugger: ^2.0
This package is auto-updated.
Last update: 2024-09-20 10:24:16 UTC
README
一个轻量级数据库层,旨在简单易用,在大型ORM和基础PHP函数(即mysqli_*)之间提供一个中间地带。支持多种数据库引擎,对象映射,Doctrine和Eloquent的初始化包装器,连接负载均衡,以及一个可选的包装器,允许以静态方式访问方法。它支持
- 支持MySQL、PostgreSQL和SQLite,并具有轻松实现其他引擎的能力。
- 自动将对象映射到/从对象。
- 自动准备所有SQL查询以防止SQL注入。
- 类型化、顺序和命名的占位符
- Doctrine和Eloquent的初始化包装器
- 可选的次要只读连接参数,当执行必要的SQL查询时,会自动切换到写入连接。
- 可选的Redis支持,带有连接管理器,允许在多个服务器实例之间轻松维护连接信息,并通过轮询自动进行多个只读连接的负载均衡。
- 用于在Redis中轻松管理连接信息的命令行工具(和PHP类)。
- 可选的内置支持Apex Debugger,它将记录请求期间执行的SQL查询到调试会话中,以便稍后分析。
- 包装类允许以静态方式访问方法,以提高效率和简化。
安装
使用Composer安装
composer require apex/db
目录
- 数据库连接
- SQL数据库方法(26个方法)
- 占位符
- 对象映射
- 附加/补充
基本用法
use Apex\Db\Drivers\mySQL\mySQL; $db = new mySQL([ 'dbname' => 'mydb', 'user' => 'myuser', 'password' => 'mydb_password' ]); // Insert a record $db->insert('users', [ 'username' => 'jsmith', 'full_name' => 'John Smith', 'email' => 'jsmith@domain.com' ); $userid = $db->insertId(); // Get single user by id# if (!$profile = $db->getIdRow('users', $userid)) { die("No user at id# $userid"); } // Get single field if (!$email = $db->getField("SELECT email FROM users WHERE id = %i", $userid)) { die("No e-mail exists for user id# $userid"); } echo "E-mail is: $email\n"; // Go through all users with @domain.com e-mail $domain = '@domain.com'; $rows = $db->query("SELECT * FROM users WHERE email LIKE %ls", $domain); foreach ($rows as $row) { echo "Found: $row[username] - $row[full_name]\n"; }
对象映射
通过简单地将对象传递给写入方法,并调用一个静态方法将结果映射到对象,可以轻松地将对象映射到/从对象。例如
use Apex\Db\Drivers\mySQL\mySQL; use Apex\Db\Mapper\ToInstance; use MyApp\Models\UserModel; $db = new mySQL([ 'dbname' => 'mydb', 'user' => 'myuser', 'password' => 'mydb_password' ]); // Get users $rows = $db->"SELECT * FROM users WHERE group_id = 2"); foreach ($rows as $row) { $user = ToInstance::map(UserModel::class, $row); // $user is a UserModel object, injected and instantiated } // Get specific user $userid = 5811; $row = $db->getIdRow('users', $userid); /// $user is a UserModel object $user = ToInstance::map(UserModel::class, $row); // Insert new user $user = new UserModel($my, $constructor, $params); $db->insert('users', $user); // Unsure if inserting or updating? No problem. $db->insertOrUpdate('users', $user);
关注Apex
在不久的将来会有很多好事到来,包括新的高质量开源软件包,更高级的文章/教程,涵盖实用的主题等。通过加入我们网站上的邮件列表或关注Twitter上的@mdizak1来保持信息畅通。