rossriley/slimmodel

轻量级模型包

dev-master / 1.0.x-dev 2014-02-13 17:58 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:06:00 UTC


README

Doctrine DBAL 的轻量级 ORM 风格包装器

Slim-Model 是一个小型库,它包装了 Doctrine DBAL,允许快速原型,同时保留了许多原始大型库的功能。

此包将所有繁重的工作委托给 Doctrine/DBAL,并摒弃了模型和字段复杂对象的概念。相反,返回的一切都是普通的 PHP 对象。

Slim-Model 可以做什么

自动数据库同步

在开发模式下,Slim-model 可以自动将数据库同步到在 define() 方法中定义的列。当此行为不再需要时,可以将模型对象设置为冻结。

与之前一样,当由于模式异常而无法运行查询时,将自动触发同步。

如何安装

通过 composer,只需将以下内容添加到任何项目的 composer.json 文件中。

"require": {
  "rossriley/slimmodel": "1.0.*@dev"
}

然后定义你的模型,如下所示扩展 Base 类。

<?php
use SlimModel\Base;

class Example extends Base {........}

运行测试。

运行单元测试以确保符合 API。克隆仓库然后运行...

composer update

这将在 vendor 目录中放置必要的依赖项。

然后确保 phpunit 在你的路径中。如果不是,你需要安装它。

进入项目目录的根目录并运行

phpunit

希望你会看到一个漂亮的绿色条。

入门和基本用法

模型构建,传入连接

首先你需要创建一个扩展 SlimModel\Base 的新模型

它看起来像下面这样...

....
use SlimModel\Base;

class Example extends Base {
  protected $table        = "example";
  protected $primary_key  = "id";

  public function setup() {
    $this->define("id",   "integer",  ["autoincrement"=>true]);
    $this->define("title","string",   []);
  }

}

注意,此包中没有自动字段。您需要定义一个主键。

现在您有了模型,我们可以开始工作了。唯一的假设是您有一个 DBALConnection 对象准备好传入。在实际中,您可能希望将对象创建委托给您的应用程序以避免不断地传递连接对象。为了这个例子,并展示该模块可以在没有任何紧密耦合的情况下工作,我们将传入连接构造函数。

插入

数据库插入只需要一个属性数组。

$model = new Example($db_connection);
$result = $model->insert(["title"=>"Hello World"]);

更新

更新需要一个主键和一些要更新的数据。

$model = new Example($db_connection);
$result = $model->update(1, ["title"=>"Hello Again"]);

删除行

通过属性选择行并删除...

$model = new Example($db_connection);
$result = $model->delete(["id"=>1]);

查找行

这是一个快速助手,用于通过主键获取数据库行;例如

$model = new Example($db_connection);
$result = $model->find(1]);
// returns ["id"=>1, "title"=>"Hello Again"]

要执行任何更高级的查询,请使用 DBAL 中的查询构建器。您可以通过以下方式获取构建器对象

$queryBuilder = $db_connection->createQueryBuilder();

然后执行如下查询

  $queryBuilder
      ->select('u.id', 'u.name')
      ->from('users', 'u')
      ->where('u.email = ?')
      ->setParameter(1, $userInputEmail)
  ;

它不能做什么

魔法。

数据以简单数据返回。如果您需要更复杂的内容,请编写辅助方法进行转换。

可以通过使用查询构建器中的功能创建连接和高级筛选。

关于定义的字段类型的说明。

包括 guid 在内的所有 Doctrine DBAL 类型都可用,因此请查看 API 文档的详细信息,地址为

http://www.doctrine-project.org/api/dbal/2.4/namespace-Doctrine.DBAL.Types.html

包括连接数据

精简模型可以通过includes功能实现懒加载和包含关联数据。注意:这主要用于简单用例时的辅助。如果您需要进行复杂操作,例如在连接表上排序或过滤连接查询,这不支持,但这些情况下最好使用查询构建器来优化您的性能。

示例:将图像与内容连接

首先,我们需要使用我们的内容模型定义一个包含。这看起来像以下内容。

use SlimModel\Base;


class Content extends Base {
  protected $table = "wildfire_content";


  public function setup() {
    $this->add_include("many", ["table"=>"media","as"=>"images"]);
  }
}