christianklisch / ckdb
平面文件键对象NoSQL数据库
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-15 22:09:10 UTC
README
CKDB是一个针对PHP脚本的键对象平面文件数据库
使用它
- 适用于小型快速网站,数据模型简单
- 如果没有外部数据库可用(例如免费网络空间)
- 当需要小型基于对象的数据库且无需复杂配置时
- 用于快速在不同Web服务器之间复制
特性
- 易于配置
- 映射实体类,无需修改它们
- 基于键对象
- 类关系
- 默认数据库函数用于插入、更新、删除对象
- 仓库用于按属性值或范围选择,按属性排序
- 快速索引文件
- 因为每个实体一个文件,所以可以并行访问不同实体的写入
安装
您可以使用require
方法手动安装脚本
require 'CKDB.php';
- 为数据库目录(在配置中为'databasepath')添加写权限
- 检查网络空间,因为基于文件的存储数据需要空间
部署
将脚本包含到您的项目中,无论是使用Composer还是通过手动require
方法,并在需要时使用适当的参数创建类的实例
$em = new CKDB($config);
配置
设置
- 要持久化到数据库中的实体类的路径数组(未选择的实体将不会作为单独的记录保存到数据库中)
- 数据库路径(检查脚本的写权限)。每个实体都有自己的存储子目录
- 压缩已启用(尚未实现)
$config = array( 'entitypaths' => array('path/to/your/entities'), 'databasepath' => 'database', 'compression' => 1, ); $em = new CKDB($config);
配置您的数据模型
以下定义的类属性将被添加到数据库索引中。
为数组中的每个类定义一个主键
$primkeys = array( 'User' => 'id' ); $em->setPrimaryKeys($primkeys);
定义您希望在选择和排序函数中使用的外键。数组中的每个值都是实体'User'中的一个字段
$forkeys = array( 'User' => array('id', 'firstname', 'email') ); $em->setForeignKeys($forkeys);
定义属性所引用的类。在数据库索引中将保存对象的主键而不是引用的主键。如果您不定义引用的类,子类将不会作为单独的数据库记录保存,并且无法通过自己的仓库进行搜索。在这个例子中,字段'homeaddress'引用了类'Address'的实体
$refclasses = array( 'User' => array('homeaddress' => 'Address') ); $em->setReferenceClasses($refclasses);
使用CKDB数据库
默认函数
使用以下方式持久化对象
$u = new User(); $u->setId('4711'); $u->setFirstname('George'); $u->setEmail('george@mail.com'); $em->persist($u);
引用的对象将自动持久化。更改您的对象后,您必须持久化它。
使用以下方式删除对象
$em->remove($u);
对象通过类的类型和定义的主键进行标识!不要更改主键!
重新索引数据库
要按实体类重建整个索引,请使用reIndex()-函数;
$em->reIndex('User');
该方法应该在索引属性或对象删除发生许多更改后调用。不要在关键过程中调用它。
搜索
要搜索一个或多个已存储的对象,您应该使用一个仓库
$userRepository = $em->getRepository('User')
CKDB在调用仓库的find()方法后提供了以下方法来查找实体
- equals(匹配字段 = > 值的数组)
- notEquals(匹配字段 = > 值的数组)
- lt lte(小于 - 匹配字段 = > 值的数组)
- gt gte(大于 - 匹配字段 = > 值的数组)
- in(数组键必须包含字段值)
- notIn(数组键必须不包含字段值)
此外,您还可以使用仓库的sortBy()-方法对结果进行排序。
示例选择
$userRepository->find()->equals(array('firstname' => 'George'))->gt(array('age' => '50'))->sortBy('age', SORT_DESC)->getResult();
此选择在“firstname”字段中搜索名为“George”且年龄超过50岁(大于等于=gt)的记录。用户应按降序排序。getResult()-方法返回数据库中找到的对象数组。
使用in()在值列表中进行搜索,选择所有Martins和Georges。
$userRepository->find()->in('firstname', array('Martin','George'))->getResult();
使用in()在对象列表中进行搜索,匹配其他数组列表中的条目(例如,所有名为Mo Miller的父亲的孩子)。
$fathers = $userRepository->find()->equals(array('firstname' => 'Mo', 'lastname' => 'Miller'))->getResult(); $userRepository->find()->in('father', $fathers)->getResult();
排序
sortBy()-方法在返回结果之前对结果进行排序。第一个参数定义了排序字段,第二个参数定义了排序顺序。您可以进行以下排序:
- SORT_ASC 升序
- SORT_DESC 降序
示例
$userRepository->find()->gt(array('age' => '50'))->sortBy('age', SORT_DESC)->getResult();
选择所有年龄超过50岁的用户,并按年龄降序排序。
待办事项
- 文档
- 添加异常
- 添加like()搜索方法
- 添加引用实体的连接
贡献者
- Christian Klisch http://www.christian-klisch.de
版权和许可
版权 2014 Christian Klisch,在Apache许可下发布。