harp-orm/query

PDO SQL 构建器

0.2.3 2014-07-07 11:52 UTC

This package is auto-updated.

Last update: 2024-09-21 21:29:45 UTC


README

Build Status Scrutinizer Quality Score Code Coverage Latest Stable Version

一个查询构建库,扩展 PDO 以允许以面向对象的方式编写查询。智能管理传递参数给 PDO 的执行。

快速使用示例

use Harp\Query\DB;

$db = new DB('mysql:dbname=test-db;host=127.0.0.1', 'root');

$query = $db->select()
    ->from('users')
    ->where('seller', true)
    ->join('profiles', ['profiles.user_id' => 'users.id'])
    ->limit(10);

foreach ($query->execute() as $row) {
    var_dump($row);
}

echo "Executed:\n";
echo $query->humanize();

查询 execute() 方法将生成一个 PDOStatement 对象,可以对其进行迭代。所有变量都作为位置参数("seller = ?")传递,因此由 PDO 驱动程序正确转义。

为什么?

PHP 已经有相当多的优秀查询构建类。例如 Paris/IdiomKohana Query Builder 等。为什么还需要另一个?以下是我的简介:

  • 与 PDO 集成 - 由于它已经为不同的 DB 驱动程序提供了大量支持,harp-orm/query 可以开箱即用地使用所有这些功能。基本 DB 类扩展了 PDO 类,而选择结果实际上是 PDOStatement 对象。所有这些都 已经有很好的文档
  • 使用 PSR 编码标准和 Symfony 命名约定,以使代码库更熟悉且易于阅读。
  • 使用 PSR 日志记录以集成任何兼容的日志记录器。
  • 支持更多不常用的 SQL 结构,例如 INSERT IGNORE、UNION、UPDATE JOIN 等。
  • 精确的方法可以更清楚地表达意图,例如 where、whereIn、whereLike 等方法允许您准确地写出您想要的,而无需从库中进行猜测。这可以提供更无错误的代码库。
  • 完全使用 DockBlocks 覆盖,因此对基于它的包进行的静态代码分析可以更准确。
  • 完整的测试覆盖

连接到数据库

使用 "DB" 对象进行数据库连接。它延迟加载一个 PDO 连接对象,并具有相同的参数。

use Harp\Query\DB;

$db = new DB(
    'mysql:dbname=test-db;host=127.0.0.1',
    'root',
    'mypass',
    [PDO::ATTR\_DEFAULT\_FETCH\_MODE => PDO::FETCH\_BOTH]
);
$db->getPdo();

您可以设置一些 DB 对象的附加选项

$logger = new NullLogger(); // Some PSR logger
$db->setLogger($logger);

// Standard sql '"' double quotes to escape table / column names
$db->setEscaping(DB::ESCAPING_STANDARD);

// Mysql '`' backticks to escape table / column names
// This is the default option
$db->setEscaping(DB::ESCAPING_MYSQL);

// No escaping for table / column names
$db->setEscaping(DB::ESCAPING_NONE);

检索数据(选择)

从数据库检索数据,使用 Select 类

选择示例

use Harp\Query\DB;

$db = new DB('mysql:dbname=test-db;host=127.0.0.1', 'root');

$select = $db->select()
    ->from('users')
    ->column('users.*')
    ->where('username', 'Tom')
    ->whereIn('type', ['big', 'small'])
    ->limit(10)
    ->order('created_at', 'DESC');

$result = $select->execute();

foreach ($result as $row) {
    var_dump($row);
}

插入数据(插入)

将新数据插入数据库,使用 Insert 类

插入示例

use Harp\Query\DB;

$db = new DB('mysql:dbname=test-db;host=127.0.0.1', 'root');

$insert = $db->insert()
    ->into('users')
    ->set([
        'name' => 'Tom',
        'family_name' => 'Soyer'
    ]);

$insert->execute();

echo $insert->getLastInsertId();

删除数据(删除)

从数据库删除数据,使用 Delete 类

删除示例

use Harp\Query\DB;

$db = new DB('mysql:dbname=test-db;host=127.0.0.1', 'root');

$delete = $db->delete()
    ->from('users')
    ->where('score', 10)
    ->limit(10);

$delete->execute();

更新数据(更新)

更新数据库中的数据,使用 Update 类

更新示例

use Harp\Query\DB;

$db = new DB('mysql:dbname=test-db;host=127.0.0.1', 'root');

$update = $db->update()
    ->table('users')
    ->set(['name' => 'New Name'])
    ->where('id', 10);

$update->execute();

详细文档

许可证

版权(c)2014,Clippings Ltd。由 Ivan Kerin 作为 clippings.com 的一部分开发。

在 BSD-3-Clause 许可证下,阅读 LICENSE 文件。