richbuilds / orm
PHP 的无线 ORM
dev-develop
2023-07-19 12:24 UTC
Requires
- php: ^8.1
- ext-bcmath: *
- ext-pdo: *
Requires (Dev)
- phpstan/phpstan: 1.11.x-dev
- phpunit/phpunit: 10.2.x-dev
- squizlabs/php_codesniffer: 3.*
This package is auto-updated.
Last update: 2024-09-19 14:57:12 UTC
README
🔗 ORM
PHP 8.1 的无线、类型安全的 ORM。
目前仅支持 MySql 数据源,但计划支持 Sqlite 和 Postgres。
ORM 从数据库获取所有指令。请确保您的主键和外键设置正确。
示例用法
$orm = new Orm(new PDO('dsn','username','password'));
模型
- 表示表中的一行
创建一个空模型
- 如果表不存在则失败
$post = $orm->Model('posts');
设置列值
- 如果列不存在则失败
- 如果值不是列兼容的数据类型则失败
$post->set('title', 'My Post Title');
设置多个列值
- 如果任何列失败则不更改任何列
$post->set([ 'title'='My Post Title', 'body'=>'My post body.', 'created'=>new Datetime() ]);
将外键列设置为现有记录
- 如果父记录不存在则失败
$post->set('author_id', 1);
将外键列设置为新的模型
- 如果模型类型不正确则失败
$user = $orm->Model('user'); $post->set('author_id', $user);
将外键列设置为包含父模型值的数组
$user = ['name'=>'foo','password'=>'password']; $post->set('author_id', $user);
设置模型的子级
- 接受字段或模型的数组
$user->set('comments',[ ['comment'=>'foo', 'visible'=>false], $orm->Model('comments')->set('comment', 'bar') ]);
保存模型、其父级和其子级
- 在事务内部,错误时回滚
- 所有键都会更新
$post->save(); echo $post->getPk();
获取父模型
- 如果列名不是外键或父级不存在则失败
$author = $post->fetchParent('author_id'); // SELECT * FROM users WHERE users.id = posts.author_id echo $author->get('name');
懒加载获取子级
- 如果子表名不是父表的子表则失败
$posts = $user->fetchChildrent('posts'); // SELECT * FROM posts WHERE posts.author_id = user.id
查询
创建一个查询
$posts = $orm->Query('posts', [ 'author_id'=>1 ], [ 'per_page'=>10 ] ) // SELECT * FROM database.posts WHERE database.posts.author_id = :1 LIMIT 10 OFFSET 0; foreach($posts as $post) { echo $post->get('title'); $comments = $post->fetchChildren('comments'); }