mathsgod / r-db
轻量级 MySQL ORM 库
5.9.0
2024-09-24 08:17 UTC
Requires
- php: >=8.0
- ext-pdo: *
- doctrine/annotations: ^1.13
- illuminate/collections: ^9.52|^10.0
- laminas/laminas-db: ^2.18
- laminas/laminas-hydrator: ^4.2
- laminas/laminas-paginator: ^2.11
- league/event: ^3.0
- psr/container: *
- psr/event-dispatcher: ^1.0
- symfony/cache: ^5 | ^6.0
- symfony/validator: ^5.3
- vlucas/phpdotenv: ^5.4
Requires (Dev)
- league/container: ^4.2
- phpunit/phpunit: ^9.6
- thecodingmachine/graphqlite: ^5.0 | ^6.0
- dev-main
- dev-next
- 5.9.0
- 5.8.0
- 5.7.0
- 5.6.4
- 5.6.3
- 5.6.2
- 5.6.1
- 5.6.0
- 5.5.0
- 5.4.0
- 5.3.0
- 5.2.0
- 5.1.0
- 5.0.3
- 5.0.2
- 5.0.1
- 5.0.0
- 4.18.0
- 4.17.3
- 4.17.2
- 4.17.1
- 4.17.0
- 4.16.3
- 4.16.2
- 4.16.1
- 4.16.0
- 4.15.1
- 4.15.0
- 4.14.0
- 4.13.1
- 4.13.0
- 4.12.0
- 4.11.1
- 4.11.0
- 4.10.0
- 4.9.5
- 4.9.4
- 4.9.3
- 4.9.2
- 4.9.1
- 4.9.0
- 4.8.4
- 4.8.3
- 4.8.2
- 4.8.1
- 4.8.0
- 4.7.1
- 4.7.0
- 4.6.0
- 4.5.4
- 4.5.3
- 4.5.2
- 4.5.1
- 4.5.0
- 4.4.0
- 4.3.0
- 4.2.0
- 4.1.3
- 4.1.2
- 4.1.1
- 4.1.0
- 4.0.14
- 4.0.13
- 4.0.12
- 4.0.11
- 4.0.10
- 4.0.9
- 4.0.8
- 4.0.7
- 4.0.6
- 4.0.5
- 4.0.4
- 4.0.3
- 4.0.2
- 4.0.1
- 4.0.0
- v3.x-dev
- 3.16.1
- 3.16.0
- 3.15.2
- 3.15.1
- 3.15.0
- 3.14.0
- 3.13.0
- 3.12.3
- 3.12.2
- 3.12.1
- 3.12.0
- 3.11.0
- 3.10.1
- 3.10.0
- 3.9.0
- 3.8.2
- 3.8.1
- 3.8.0
- 3.7.0
- 3.6.12
- 3.6.11
- 3.6.10
- 3.6.9
- 3.6.8
- 3.6.7
- 3.6.6
- 3.6.2
- 3.6.1
- 3.6.0
- 3.5.3
- 3.5.2
- 3.5.1
- 3.5.0
- 3.4.0
- 3.3.1
- 3.3.0
- 3.2.1
- 3.2.0
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1.2
- 3.1.1.1
- 3.1.1
- 3.1.0
- 3.0.17
- 3.0.16
- 3.0.15
- 3.0.14
- 3.0.13
- 3.0.12
- 3.0.11
- 3.0.10
- 3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.0.9
- 2.0.8
- 2.0.7
- 2.0.6
- 2.0.0
- 1.1.2
- 1.1.1
- 1.1.0
- dev-theorchards
- dev-php-70
This package is auto-updated.
Last update: 2024-09-24 08:22:54 UTC
README
r-db
安装
composer require mathsgod/r-db
设置
使用 .env
使用 .env 文件设置默认数据库连接
DATABASE_HOSTNAME= DATABASE_DATABASE= DATABASE_USERNAME= DATABASE_PASSWORD= DATABASE_PORT= DATABASE_CHARSET=
函数 Q
函数 Q 是从数据库中快速选择数据的一种方式。
简单选择
这将选择 User 表中的所有数据,并以 stdClass 数组的形式输出。
use function R\DB\Q; print_r(Q("User")->get()); // select * from User
带有类关联的输出
您也可以以类关联的形式输出。
class User{ } print_r(Q(User::class)->get()); // select * from User
带有字段和过滤器的选择
过滤参数基于 laminas-db where
print_r(Q("User")->fields(["user_id","username"])->filter(["type"=>1])->get()); // select user_id,username from User where type=1
带有 limit 和 offset 的选择
print_r(Q("User")->limit(10)->offset(0)->get()); // select * from User limit 10 offset 0
带有排序的选择
print_r(Q("User")->order("user_id desc")->get()); // select * from User order by user_id desc
填充
填充用于从其他表中选择相关数据,它将自动检查表之间的主键关系
class UserRole{ } class User{ } print_r(Q(User::class)->populate([ UserRole::class=>[] ])->get()); /* Array ( [0] => User Object ( [username] => admin [user_id] => 1 [UserRole] => Array ( [0] => UserRole Object ( [user_role_id] => 1 [user_id] => 1 [role] => Administrators ) ) ) ) */
Stream 包装器
通过使用 stream wrapper,您可以将数据库表作为文件访问
use R\DB\Schema; use R\DB\Stream; Stream::Register(Schema::Create(), "db"); echo file_get_contents("db://User"); //List all users, User is the table name // User can also be a class name, it will auto convert to table name
列出单个记录
echo file_get_contents("db://User/1"); //List user with primary key 1
按字段列出
//List all user with fields first_name and last_name echo file_get_contents("db://User?fields[]=first_name&fields[]=last_name"); //List user with primary key 1 and field username echo file_get_contents("db://User/1?fields[]=user_id&fields[]=username");
按过滤器列出
$query=http_build_query([ "filters"=>[ "status"=>[ "eq"=>1 ] ] ]); echo file_get_contents("db://User?$query"); //List all user with status=1
按 limit 和 offset 列出
echo file_get_contents("db://User?limit=10&offset=0"); //List first 10 users
检查表是否存在
file_exists("db://User"); //return true if table User exists
重命名表
rename("db://User","db://User2"); //rename table User to User2
删除表
unlink("db://User2"); //drop table User2
Schema Aware
您可以在类中定义一个名为 GetSchema() 的静态方法来定义表的架构
class User implements SchemaAwareInterface{ public static function GetSchema(){ return $schema1; } }
类 R\DB\Model
通过扩展 R\DB\Model,您可以使用以下方法操作数据库
class User extends R\DB\Model{ }
插入记录
User::Create([ "username"=>"user1", "first_name"=>"John" ])->save();
获取记录
$user = User::Get(1); // 1 is primary key $user_not_exists = User::Get(999); // $user_not_exists==null
更新记录
$user = User::Get(1); // 1 is primary key $user->first_name="Mary"; $user->save(); // user record updated
删除记录
$user = User::Get(1); // 1 is primary key $user->delete(); // user record is deleted
查询记录列表
$users = User::Query(["status"=>0]); print_r($users->toArray()); // list all users status is equal to 0
默认驱动器选项
[ PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false ]
mysql8 校对
由于 PHP PDO 默认校对不匹配 mysql8,请添加以下选项
$options=[ PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci'" ];