phpwax / slimmodel

轻量级模型包

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

This package is not auto-updated.

Last update: 2024-09-24 02:01:29 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"]);
  }
}