dynamonet/query-builder

针对 PHP 7.1(或更高版本)的流畅、灵活且轻量级的 SQL 查询构建器

v1.0.1 2020-03-23 23:16 UTC

This package is auto-updated.

Last update: 2024-09-24 09:25:40 UTC


README

流畅且灵活的 SQL 查询构建器,融合了所有查询构建器中的最佳理念。

快速概述

use Dynamo\QueryBuilder\SqlQueryBuilder as Query;

$users = (new Query)
  ->select('*') // This is the default select
  ->from('users u')
  ->leftJoin('posts p',[
    'p.user_id = u.id',
    'p.trashed' => null
  ]) // translates to: LEFT JOIN posts p ON p.user_id = u.id AND p.trashed IS NULL
  ->where([
    'role' => 'ADMIN', // translates to "role = ?", where "?" will be securely replaced by the PDO layer
    "age > $minAge", // insecure! $minAge will not be prepared! However, we allow this form for convenience
    'age >' => $minAge, // better, and prepareable
    [ 'age', '<=', $maxAge ], // field-operator-value array if you prefer
    'age BETWEEN' => [ $minAge, $maxAge ], // even better
  ], false) // false "OR's" all the previous conditions. Default is true, which will "AND" all the conditions 
  ->fetchAll(); // Fetches all the results

关于 JOIN 操作和数组条件的警告

注意,在前面的示例中,在 join 方法内部,第一个条件是 'p.user_id = u.id' 而不是更美观的形式 'p.user_id' => 'u.id',这是因为后者将被翻译为 "p.user_id = 'u.id'",匹配 user_id 等于字符串 "u.id" 的帖子(这不是我们想要的)。

与 PDO 连接一起工作

创建一个新的 PDO 实例,并将其传递给 SqlQueryBuilder 构造函数

use Dynamo\QueryBuilder\SqlQueryBuilder as Query;
....
$pdo = new \PDO('mysql:dbname=mydb;host=localhost;charset=utf8', 'myuser', 'mypass');
$query = (new Query($pdo))

或者更好的是,全局设置 PDO

Query::setPdo($pdo);
....
$query = (new Query()) // this will use the static PDO instance.

安装

composer require dynamonet/query-builder