alcyz/alcys-orm

AlcysDB 数据库适配器,使您可以在外部应用程序中使用数据库对象。

dev-master 2016-03-01 11:59 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:42:14 UTC


README

一个测试驱动的PHP-ORM系统,100½代码覆盖率,带API文档。实际上,我只支持MySql,但其他驱动程序将随后跟进。

安装

下载并解压zip包。将src/目录复制到您的项目,并使用PSR-0或PSR-4自动加载器来要求文件。在包根目录中存在一个小型且简单的PSR-0自动加载器,也可以使用。

<?php
require_once 'Autoloader.php';

spl_autoload_register(
    array('Autoloader', 'load');
);

Autoloader::register('src/');

使用

实例化Alcys\Core\Db\Service\AlcysDb类的对象。有一些方法可以创建SELECT、INSERT、DELETE或UPDATE语句对象,这些对象与数据库进行通信。

$db = new Alcys\Core\Db\Service\AlcysDb('mysql:host=localhost;dbname=db_name', 'db_user', 'db_password');

$select = $db->select('table_name'); # Object for select statements
$update = $db->update('table_name'); # Object for update statements
$insert = $db->insert('table_name'); # Object for insert statements
$delete = $db->delete('table_name'); # Object for delete statements

表名是必需的,需要通过create方法传递它作为参数。要添加其他表,简单使用每个语句对象中存在的table()方法。如果columns方法(仅在delete语句中不存在)未调用,则将为列添加通配符(*)。

示例

简单选择查询

# SELECT `test_column`, `column` AS `clm` FROM `test_table` AS `my_table` ORDER BY `clm` DESC;
$select = $db->select(`test_table`, `my_table`);

$resultArray = $select->column('test_column')
					  ->column('column', 'clm')
					  ->orderBy('clm', 'desc')
					  ->fetch();

简单更新查询

# UPDATE `test_table` SET `column` = "value", `clm` = "val" LIMIT 4, 15;
$update = $db->update(`test_table`);

$update->column('column')->value('value')
       ->column('clm')->value('val')
       ->limit('4', '15')
       ->execute();

简单插入查询

# INSERT INTO `test_table` (`column`, `clm`) VALUES ("val", "value"), ("any_value", "this_value");
$insert = $db->insert(`test_table`);

$insert->columns(array('column', 'clm'))
       ->values(array('val', 'value'))
       ->values(array('any_value', 'this_value'))
       ->execute();

简单删除查询

# DELETE FROM `test_table` ORDER BY `column` ASC LIMIT 0, 5;
$delete = $db->delete(`test_table`);

$delete->orderBy('column')
       ->limit('0', '5')
       ->execute();

Where-条件

所有语句对象(而不是InsertStatement)都有一个'condition'方法,该方法返回一个用于创建条件的对象。在调用对象的一些方法来构建条件之后,将其传递给'where'方法。

# WHERE `column_name` != 'value'

$delete->where($delete->condition()->notEqual('column_name', 'value'));

如果您想比较两个列,将字符串'column'作为第三个参数传递。

# WHERE `first_column` >= `second_column`

$update->where($update->condition()->greaterEqual('first_column, 'second_column', 'column');

要连接多个条件,必须在其他条件方法之间调用'logicAnd'和'logicOr'方法。如果没有在条件之间调用它们,将抛出异常。

# WHERE `first_column` = 'a' AND `cl` != `clm` OR `column` < 5

$condition = $select->condition();
$condition->equal('first_column', 'a')->logicAnd()->notEqual('cl', 'clm', 'column')->logicOr()->lower('column', 5);

$select->where($condition)->fetch();

类似条件将随后跟进..

连接

在当前版本中,连接仅在SELECT语句中实现。其他语句的功能将在下一个版本中实现。

'joinBuilder'方法返回一个用于创建连接表达式的对象。这必须传递给语句的'join'方法。

# LEFT JOIN `table_name` USING `column`

$select->join($select->joinBuilder()->left('table_name')->using('column'));

'on'方法的参数必须是包含键'table'和'column'的两个关联数组。如果数组无效,将抛出异常。

# INNER JOIN `table` ON (`tbl`.`cl`, `table`.`clm`);

$firstColumn = array('table' => 'tbl', 'column' => 'cl');
$secondColumn = array('table' => 'table', 'column' => 'clm');

$select->join($select->joinBuilder()->inner('table')->on($firstColumn, $secondColumn));

在调用'on'或'using'方法之前,必须调用'inner'、'left[Outer]'或'right[Outer]'方法,否则将抛出异常。

如果您想连接一个具有所有等效列名的表,可以使用'natural'方法。第一个参数是表名,可选的第二个参数可以是'inner'、'left[Outer]'或'right[Outer]。

# NATURAL JOIN `table`
$select->join($select->joinBuilder()->natural('table'));

# NATURAL RIGHT JOIN `table`
$select->join($select->joinBuilder()->natural('table', 'right'));