一个ZF2模块,允许开发者在关注他们工作的实体上,而不是如何在数据库中检索或存储数据。

dev-master / 1.0.x-dev 2014-10-17 09:57 UTC

This package is not auto-updated.

Last update: 2024-09-14 12:29:17 UTC


README

ZeDb是一个提供快速访问数据库的zend框架模块,通过为表创建实体,允许你关注实体而不是模型。

安装

可以通过Composer安装此模块,只需将以下行添加到您的composer.json文件中

"require": {
    "zendexperts/ze-db": "dev-master"
}

为了使用此模块,您需要将其添加到config/application.config.php中的模块列表中,并在配置文件中设置实体、模型列表以及数据库设置

'zendexperts_zedb' => array(
    'adapter' => array(
        'driver'    => 'Pdo_Mysql',
        'database'  => 'test',
        'username'  => 'root',
        'password'  => ''
    ),
    'models' => array(
        'Application\Model\User' => array(
            'tableName' => 'users',
            'entityClass' => 'Application\Entity\User',
        ),
    ),
)

文档

ZeDb通过在处理数据库时节省您的时间,帮助您专注于应用程序的业务方面。它提供了一组强大的魔法函数,允许您轻松执行查询,而无需编写SQL查询。

ZeDb与实体类一起工作,尽管它提供了一个基类Entity,但您也有机会通过实现ZeDb\EntityInterface来编写自己的自定义实体。

ZeDb与Doctrine类似工作,实际上它使用Manager来检索模型实例。这些模型实例包含用于访问数据库以检索实体对象、删除数据或计算记录的魔法函数。

Model类定义了以下函数

  • save(EntityInterface $entity):将实体记录保存到数据库并返回其id
  • persist($entities):在将实体保存到数据库之前,将一个或多个实体本地存储
  • flush():将所有持久化对象保存到数据库
  • get($id):根据记录的id返回一个实体类

除了上述函数外,模型还定义了一组可以处理表列、排序或限制的组合魔法函数。

这些方法使用的模式如下

  1. 函数名前缀,可以是以下之一
  • removeBy:从表中删除一个或多个记录
  • getAll:从表中返回所有记录
  • getBy:根据指定字段中的值返回单个实体类
  • getAllBy:与getBy相同,但返回多个记录(如果找到的话)
  • getLike:使用LIKE而不是=根据指定字段中的值返回单个实体类
  • getAllLike:与getLike相同,但返回多个记录(如果找到的话)
  • getByColumns:允许您指定一个键值数组,该数组可以传递给Select实例的where方法,然后在返回单个实体之前
  • getAllByColumns:与getByColumns相同,但返回多个记录
  1. 字段名列表,以驼峰式命名,由And词分隔。例如:$model->getByUsernameAndStatus('paul', 'active');。这仅适用于以下函数:removeBy、getBy、getAllBy、getLike、getAllLike。

  2. 在所有函数中都是可选的。

  3. 紧跟在Limit文本后面的数字代表应返回的最大记录数。如果定义了limit,您还可以指定一个起始偏移量,方法是在数字前添加From文本。

实体类定义了两个可以帮助您更快地与数据库交互的方法。

  • save():将当前实体实例保存到数据库中。
  • delete():从数据库中删除实体。

目前,每个实体实例的字段都保存在数据数组中以实现快速访问和对象与数组之间的转换,但您始终可以实现EntityInterface并创建您自己的自定义实体类。

示例

  1. 在控制器操作中通过id获取用户实体。
public function indexAction()
{
    $manager = $this->getServiceLocator()->get('ZeDbManager');
    $model = $manager->get('Application\Entity\User');
    $user = $model->getById(1);
    return array();
}