mkgor/humble

轻量级、可扩展且易于使用的查询构建器。

维护者

详细信息

github.com/mkgor/humble

源代码

问题

安装次数: 0

依赖者: 0

建议者: 0

安全性: 0

星标: 1

关注者: 2

分支: 0

开放问题: 0

类型:项目

dev-master 2020-04-30 20:34 UTC

This package is not auto-updated.

Last update: 2024-09-29 05:42:40 UTC


README

轻量级、可扩展且易于使用的查询构建器。

内容

要求

  • PHP 7.1+
  • PDO

安装

通过 composer 安装

composer require mkgor/humble

快速开始

<?php

/** Initializing database manager */
$db = new \Humble\DatabaseManager([
    'connection' => [
        'db' => 'test',
        'host' => '127.0.0.1',
        'user' => 'root',
        'password' => ''
    ]
]);

/** After initializing, you can get any table from specified db */

/** @var Humble\Database\RepositoryInterface $user */
$user = $db->user;

/** @var stdClass $someUser */
$someUser = $user->get(1);

/** @var stdClass[] $administrators */
$administrators = $user->getBy([
    new \Humble\Query\Where(['admin' => 1])
]);

$authorsAndTheirBooks = $user->getBy([
    new \Humble\Query\Join('books', ['user.id' => 'books.author_id'], \Humble\Query\Join::HUMBLE_LEFT_JOIN)
]);

/** Creating new record */
$user->insert([
    'name' => 'John Doe',  
    'admin' => 1
]);

/** Updating record */
$user->update([
    new \Humble\Query\Where(['name' => 'John Doe'])
], [
    'name' => 'John Doe jr.'
]);

/** Deleting record */
$user->delete([
    new \Humble\Query\Where(['id' => 2])
]);

查询构建块

您可以使用查询构建块构建复杂的查询。查询构建块是一个类,它将 SQL 代码块添加到查询中。

示例

<?php
/** @var \Humble\Database\RepositoryInterface $user */
$user = $db->user;

$authorsAndTheirBooks = $user->getBy([
    new \Humble\Query\Join('books', ['user.id' => 'books.author_id'], \Humble\Query\Join::HUMBLE_LEFT_JOIN),
    new \Humble\Query\Where(['books.views','>',1000])
]);

此代码将生成 SQL

SELECT * FROM `user` LEFT JOIN `books` `books_1234` ON user.id = `books_1234`.author_id WHERE `books_1234`.views > 1000

Where, AndWhere, OrWhere

将 WHERE 添加到查询中

用法

<?php
/** @var \Humble\Database\RepositoryInterface $user */
$user = $db->user;

// ... WHERE `admin` = 1
$administrators = $user->getBy([
    new \Humble\Query\Where(['admin' => 1])
]);

// ... WHERE `admin` = 1 AND `registration_date` > '01-01-2020'
$newAdministrators = $user->getBy([
    new \Humble\Query\Where(['admin' => 1],['registration_date', '>' ,'01-01-2020'])
]);

// Doing the same, but it is unsafe if you are putting non-escaped values into query
$inlineWhere = $user->getBy([
    new \Humble\Query\Where('admin = 1 AND registration_date > "01-01-2020"')
]);

// ... WHERE `name` = 'John Doe' OR (`name` = 'Sarah Doe')
$objectInWhere = $user->getBy([
    new \Humble\Query\Where(['name' => 'John Doe'], new \Humble\Query\OrWhere(['name' => 'Sarah Doe']))
]);

// ... WHERE `name` = 'John Doe' OR (`name` = 'Sarah Doe' AND (`admin` = 1))
$complexWhere = $user->getBy([
    new \Humble\Query\Where(['name' => 'John Doe']),
    new \Humble\Query\OrWhere(['name' => 'Sarah Doe'], new \Humble\Query\AndWhere(['admin' => 1]))
]);

连接

将 JOIN 添加到您的查询中

<?php

/** @var \Humble\Database\RepositoryInterface $user */
$user = $db->user;

$authorsAndTheirBooks = $user->getBy([
    new \Humble\Query\Join('books', ['user.id' => 'books.author_id'], \Humble\Query\Join::HUMBLE_LEFT_JOIN),
]);

$outerJoinFlagDemo = $user->getBy([
    new \Humble\Query\Join('books', ['user.id' => 'books.author_id'], \Humble\Query\Join::HUMBLE_LEFT_JOIN, [\Humble\Query\Join::HUMBLE_OUTER_JOIN_FLAG]),
]);

所有常量的列表

\Humble\Query\Join::HUMBLE_JOIN
\Humble\Query\Join::HUMBLE_LEFT_JOIN
\Humble\Query\Join::HUMBLE_RIGHT_JOIN
\Humble\Query\Join::HUMBLE_CROSS_JOIN
\Humble\Query\Join::HUMBLE_INNER_JOIN
\Humble\Query\Join::HUMBLE_NATURAL_JOIN

所有标志的列表

\Humble\Query\Join::HUMBLE_OUTER_JOIN_FLAG