mathsgod/r-db
最新稳定版本:5.10.0
Composer 安装命令:
composer require mathsgod/r-db
包简介
A lightweight orm library for mysql
README 文档
README
r-db
Install
composer require mathsgod/r-db
Setup
using .env
Using .env file to setup default database connection
DATABASE_HOSTNAME= DATABASE_DATABASE= DATABASE_USERNAME= DATABASE_PASSWORD= DATABASE_PORT= DATABASE_CHARSET=
Function Q
Function Q is a fast way to select data from database.
simple select
This will select all data from table User and output as array of stdClass
use function R\DB\Q; print_r(Q("User")->get()); // select * from User
output with class asscociation
You can also output as class association
class User{ } print_r(Q(User::class)->get()); // select * from User
select with fields and filter
filter parameter is based on laminas-db where
print_r(Q("User")->fields(["user_id","username"])->filter(["type"=>1])->get()); // select user_id,username from User where type=1
select with limit and offset
print_r(Q("User")->limit(10)->offset(0)->get()); // select * from User limit 10 offset 0
select with order
print_r(Q("User")->order("user_id desc")->get()); // select * from User order by user_id desc
populate
populate is used to select related data from other table, it will auto check the relationship between tables by primary key
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 wrapper
By using stream wrapper, you can access the database table as a file
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
List single record
echo file_get_contents("db://User/1"); //List user with primary key 1
List by fields
//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");
List by filter
$query=http_build_query([ "filters"=>[ "status"=>[ "eq"=>1 ] ] ]); echo file_get_contents("db://User?$query"); //List all user with status=1
List by limit and offset
echo file_get_contents("db://User?limit=10&offset=0"); //List first 10 users
Check if table exists
file_exists("db://User"); //return true if table User exists
Rename table
rename("db://User","db://User2"); //rename table User to User2
Drop table
unlink("db://User2"); //drop table User2
Schema Aware
You can define a static method GetSchema() in your class to define the schema of the table
class User implements SchemaAwareInterface{ public static function GetSchema(){ return $schema1; } }
Class R\DB\Model
By extends R\DB\Model, you can use the following methods to operate the database
class User extends R\DB\Model{ }
insert record
User::Create([ "username"=>"user1", "first_name"=>"John" ])->save();
get record
$user = User::Get(1); // 1 is primary key $user_not_exists = User::Get(999); // $user_not_exists==null
update record
$user = User::Get(1); // 1 is primary key $user->first_name="Mary"; $user->save(); // user record updated
delete record
$user = User::Get(1); // 1 is primary key $user->delete(); // user record is deleted
query list record
$users = User::Query(["status"=>0]); print_r($users->toArray()); // list all users status is equal to 0
Default driver option
[
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false
]
mysql8 collation
Due to php pdo default collation not match with mysql8, add the following options
$options=[ PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_0900_ai_ci'" ];
统计信息
- 总下载量: 577
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 8
- 推荐数: 2
其他信息
- 授权协议: MIT
- 更新时间: 2021-01-25