php-objects/php-query-builder

查询构建器 - 简化 SQL 编写

0.9.4 2014-07-23 01:28 UTC

This package is not auto-updated.

Last update: 2024-09-24 08:40:39 UTC


README

简化 SQL 编写的查询构建器

Build Status Coverage Status Code Climate Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version License

安装

通过 Composer 安装

将库添加到 composer.json 中的 requirements 键。

{
    // composer.json
    // [..]
    require: {
        // append this line to your requirements
        "php-objects/php-query-builder": "dev-master"
    }
}

替代安装

  • 学习 composer。您不应该寻找替代安装方式。这是值得的。相信我 ;-)
  • 遵循 这些说明

使用方法

SELECT

这是一个选择查询的示例。

$fields = array('u.name AS name', 'r.name AS role');

// Selecting via factory
$select = PO\QueryBuilder::select($fields);

// Selecting via the select method
$select = PO\QueryBuilder::select()
    ->select($fields);

// or alternatively
$select = new PO\QueryBuilder\Statements\Select();
$select->select($fields);

// From
$select->from('users u');

// Adding joins
$select->innerJoin('roles r', 'u.id = r.user_id');

$select->toSql();

// SELECT u.name AS name, r.name AS role 
// FROM users u INNER JOIN roles r ON u.idi = r.user_id

INSERT

// Using the factory
$insert = PO\QueryBuilder::insert();

// Or alternatively
$insert = new PO\QueryBuilder\Statements\Insert();

$insert->into('users')->values(array(
    'name'  => 'Jon Doe',
    'email' => 'jon@doe.com'
));

$insert->toSql();

// INSERT INTO users (name, email) VALUES ('Jon Doe', 'jon@doe.com');

UPDATE

$update = PO\QueryBuilder::update('users');

// or
$update = new PO\QueryBuilder\Statements\Update;
$update->table('users');

// setting values and conditions

$update->set(array(
        'enabled' => 1
    ))->where('email', ':email');

$update->toSql(array(
    'email' => 'admin@email.com'
));

// UPDATE users SET enabled = 1 WHERE email = 'admin@email.com'

DELETE

$delete = PO\QueryBuilder::delete('users');

// or
$delete = new PO\QueryBuilder\Statements\Delete;
$delete->from('users');

// setting values and conditions

$delete->where('email', ':email');

$delete->toSql();

// DELETE FROM users WHERE email = 'admin@email.com'

WHERE

每次调用 where() 方法时,都会将条件添加到查询中。

// method signature
$query->where($field, $value, $operator);

// or
$query->where($condition);

// or
$query->where(array(
    array($field, $value, $operator),
    array($condition),
));

// Below some valid examples:

$query->where('email', 'admin@abc.com');
// WHERE email = 'admin@abc.com'

$query->where('email', 'admin@abc.com', '<>');
// WHERE email <> "admin@abc.com"

$query->where('email', '%@google.com', 'LIKE');
// WHERE email <> "LIKE@abc.com"

$query->where('age', 20);
// WHERE age = 20

$query->where('code', 001);
// WHERE code = 001

$query->where('code', array('value' => '001'));
// WHERE code = '001'

$query->where('(code = 1 OR code = 2)'));
// WHERE (code = 1 OR code = 2)

// multiple conditioins, one method call
$query->where(array(
    array('email', 'admin@abc.com', '<>'),
    array('email', '%@google.com', 'LIKE'),
    array('age', 20),
    array('(code = 1 OR code = 2)'),
    array('hash', array('value' => 'SOMEFUNCTION()')),
));

// WHERE condition 1 AND condition 2..

ORDER BY

$query->orderBy('name DESC');
// or
$query->orderBy(array('name DESC', 'age ASC'));

GROUP BY

$query->groupBy('a, b, c');
// or
$query->groupBy(array('a', 'b', 'b'));

LIMIT

$query->limit(2);
$query->limit(2, 1);

使用占位符

当不知道将要使用哪些值时(例如,因为它们取决于尚未执行的查询的结果),占位符是构建查询的好方法。

$insert->into('users')->values(array(
    'name'  => ':name',
    'email' => ':email'
));

$insert->toSql(array(
    'name'  => 'Jon Doe',
    'email' => 'jon@doe.com'
));

// INSERT INTO users (name, email) VALUES ('Jon Doe', 'jon@doe.com');

问题/功能建议

在这里 是问题跟踪器。

贡献

只接受 TDD 代码。请遵循 PSR-2 代码标准

  1. 分叉它
  2. 创建您的功能分支 (git checkout -b my-new-feature)
  3. 提交您的更改 (git commit -am '添加一些功能')
  4. 将更改推送到分支 (git push origin my-new-feature)
  5. 创建新的 Pull Request

如何运行测试

phpunit --configuration tests/phpunit.xml

要检查代码标准,请运行

phpcs --standard=PSR2 lib
phpcs --standard=PSR2 tests

# alternatively

./bin/travis/run_phpcs.sh

许可

MIT

作者