alcyz / alcys-orm
AlcysDB 数据库适配器,使您可以在外部应用程序中使用数据库对象。
Requires
- php: >=5.3.0
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'));