devco/trilogy

简单的轻量级SQL语句抽象。

此包的官方仓库似乎已不存在,因此该包已被冻结。

1.3.2 2017-03-22 03:56 UTC

This package is not auto-updated.

Last update: 2022-07-23 02:43:50 UTC


README

简单的轻量级SQL语句抽象。

为什么

为了抽象对不同的后端的常见操作。

用法

Trilogy的目标是尽可能简单易用和扩展。

驱动器

Trilogy目前支持以下驱动器

  • MySQL
  • PostgreSQL

正在开发其他驱动器

  • MongoDB
  • SQL Server

建立连接

要使用特定驱动器建立连接,只需使用主Connection对象。

$db = new Trilogy\Connection\Connection;

这将连接到本地主机上的MySQL,使用端口3306,连接到数据库default。这些可能是最佳默认设置,但您很可能需要指定其他选项

$db = new Trilogy\Connection\Connection([
    'driver'   => 'pgsql',
    'host'     => '10.0.0.2',
    'port'     => 5432,
    'database' => 'mydb',
    'username' => 'myusername',
    'password' => 'mypassword',
    'options'  => []
]);

驱动器选项

  • driver 要使用的Trilogy支持驱动器名称。
  • host 数据库所在的主机。
  • port 主机端口。
  • database 要使用的数据库名称。
  • username 数据库用户名。
  • password 数据库密码。
  • options 要使用的任何特定于驱动器的选项。

语句

Trilogy支持以下类型的语句

  • 查找
  • 删除
  • 保存

语句类型

有不同类型的语句构成完整的Trilogy语句。

  • Data 允许应用任意数据,如INSERT或UPDATE语句。
  • Field 允许选择字段,如SELECT语句。
  • Join 允许应用连接,如SELECT语句。
  • Limit 允许语句限制结果中的项目。
  • Sort 允许语句对结果中的项目进行排序。
  • Source 允许选择数据源,如表或集合。
  • Where 允许应用条件。

数据语句类型

数据部分允许应用任意数据。

$save = $db->save->data(['field1' => 'value1', 'field2' => 'value2']);

// [ 'field1' => 'value1', 'field2' => 'value2' ]
$save->getData();

字段语句类型

Field 部分允许选择字段。

$find = $db->find
    ->get('test1')
    ->get(['test2', 'test3']);

// [ 'test1', 'test2', 'test3' ]
$find->getFields();

连接语句类型

$find = $db->find
    ->join('test2')
    ->on('test1.id = test2.id')
    ->open()
    ->andOn('test2.something', 1)
    ->orOn('test2.something', null)
    ->close();

// [ Trilogy\Statement\Part\Join, Trilogy\Statement\Part\Join, Trilogy\Statement\Part\Join ]
$find->getJoins();

// [ 1, null ]
$find->getJoinParams();

限制语句类型

$find = $db->find->limit(10, 20);

// same as...
$find = $db->find->page(10, 3);

// 10
$find->getLimit();

// 20
$find->getOffset();

// [10, 20]
$find->getLimitParams();

排序语句类型

$find = $db->find->sort('field1', 'desc');

// [ 'field1' => 'DESC' ]
$find->getSorts();

// [ 'field1', 'DESC' ]
$find->getSortParams();

源语句类型

$find = $db->find
    ->in('table1')
    ->in(['table2', 'table3']);

// [ 'table1', 'table2', 'table3' ]
$find->getSources();

WHERE语句类型

$find = $db->find
    ->where('field1', 1)
    ->open()
    ->andWhere('field2', 2)
    ->orWhere('field3', 3)
    ->close();

// [ Trilogy\Statement\Part\Where, Trilogy\Statement\Part\Where, Trilogy\Statement\Part\Where ]
$find->getWheres();

// [ 1, 2, 3 ]
$find->getWhereParams();

源表达式

源表达式由两部分组成,这两部分由空白字符分隔

<source> <alias = null>

字段表达式

字段表达式由两部分组成,这两部分由空白字符分隔

<field> <alias = null>

连接和WHERE表达式

表达式由3部分组成,由空白字符分隔

<field or alias> <operator = "="> <value = "?">

field只是一个字段名,没有特殊之处。一个operator是一个特殊令牌,由驱动程序使用以转换为它所代表的后端的有效运算符。值可以是另一个字段引用或一个?占位符。

任何源、字段、别名或非占位符值都将自动引用。

有效的运算符包括

  • = 等于某个值。
  • != 不等于某个值。
  • ~ 类似于某个值。
  • !~ 不类似于某个值。
  • * 此字段必须包含指定数组中的某个值。
  • !* 此字段必须不包含指定数组中的某个值。
  • < 小于。
  • <= 小于或等于。
  • > 大于。
  • >= 大于或等于。

由于运算符如果找不到匹配项则直接传递,因此其他运算符可能有效,但不会被Trilogy抽象化。

每种类型的语句都使用这些部分

  • Find 使用 FieldJoinLimitSortSource
  • Remove 使用 SourceWhere
  • Save 使用 DataSourceWhere

Find语句

Find语句用于返回一个结果集。

$find = $this->db->find->in('test')->where('field1', 'value1');

您可以选择DISTINCT值。

$find = $this->db->find->in('test')->distinct()->where('field1', 'value1');

您可以简单地输出编译后的语句

echo $find->compile();

字符串转换也有效

echo $find;

您可以在执行语句之前遍历该语句。这样做将执行该语句并返回迭代器结果

foreach ($find as $item) {
    ...
}

如果您需要手动执行该语句

$result = $find->execute();

Remove语句

Remove语句允许您创建一个查询,从数据源中删除记录。

$removed = $this->db->remove->in('test')->where('field1', 'value1')->execute();

Save语句

Save语句允许您插入或更新数据。是否插入或更新取决于是否提供了任何条件。如果没有,则插入;如果有,则更新。

插入

$inserted = $this->db->save->in('test')->data(['field1' => 'value1']);

多行插入

$inserted = $this->db->save->in('test')->dataSet([['field1' => 'value1'], ['field1' => 'value1']]);

更新

$updated = $this->db->save->in('test')->data(['field1' => 'value2'])->where('field1', 'value1');

许可证

版权所有 (c) 2013 Ultra Serve Internet Pty Ltd

在此特此授予任何获得本软件及其相关文档文件(“软件”)副本的人免费使用权,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供者提供软件的人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的任何副本或实质性部分中。

本软件按“原样”提供,不提供任何形式的保证,无论是明示的还是隐含的,包括但不限于适销性、适用于特定目的和不侵犯知识产权的保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论该责任是基于合同行为、侵权或其他原因,以及软件的产生、来源或与软件的使用或其他相关事宜。