定制 subapp/sql 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

subapp/sql

Composer 安装命令:

composer require subapp/sql

包简介

SQL Two Way Parser/Builder

README 文档

README

SQL Parser-QueryBuilder

Main Factory

$factory = Sql::getInstance();

Query/Builder

$query = $factory->newQuery();
$builder = $query->getBuilder();

Create AST

$parser = $factory->getProcessor(); // as default
$parser->getLexer()->tokenize('select U.id, U.name, max(U.id) from users U where U.id > 100');
$ast = $parser->parse();

Converter

$converter = $factory->getConverter();

$array  = $converter->toArray($ast); 
$ast    = $converter->toNode($array); 

$converter->toSql($ast); 
// > SELECT U.id, U.name, MAX(U.id) FROM users AS U WHERE U.id > 100

Query/Builder

Select

$query->reset(); // optional. this action rewrite root node

$query->select('users')->noCache();
$query->columns('test', 'id', 'created', 'count(*) cnt');
$query->where('id = 1'); 

$query->getSql();
SELECT SQL_NO_CACHE (test, id, created, COUNT(*) AS cnt) FROM users WHERE id = 1

Insert

$query->reset(); // optional. this action rewrite root node

$query->insert('users U')->ignore();
$query->fields('U.name', 'created');
$query->values([
    ['tedd', '2019-01-01'],
]);
$query->values([
    ['john', $builder->sql('now()')],
    ['nedd', '2019-01-01'],
]);

$query->getSql();
INSERT IGNORE INTO users AS U (U.`name`, created) VALUES ('tedd', '2019-01-01'), ('john', NOW()), ('nedd', '2019-01-01') 

Update

$query->reset(); // optional. this action rewrite root node

$query->update('users U')->delayed();
$query->sets([
    'name' => 'John',
    'date' => '2018-01-01',
    'hits' => $builder->sql('sum(U.hit)')
]);

$where = $builder->and(
    $builder->or('U.id > 2', 'U.id < len(U.email)'),
    $builder->or('U.id < 0', 'U.id > len(U.name)', $builder->eq('x', $builder->sql('len(x)')))
);

$query->where($where);
UPDATE DELAYED users AS U SET name = 'John', date = '2018-01-01', hits = SUM(U.hit) WHERE (U.id > 2 OR U.id < LEN(U.email)) AND (U.id < 0 OR U.id > LEN(U.name) OR x = LEN(x))

Delete

$query->reset(); // optional. this action rewrite root node

$query->delete('users U')->quick();
$query->where(
    $builder->or(
        'U.id = 1', 
        $builder->ge('U.id', 1000), 
        $builder->ge('U.access', 
            $builder->sql('rand()')
        ))
);
$query->limit(1);

$query->getSql();
DELETE QUICK users AS U WHERE (U.id = 1 OR U.`id` >= 1000 OR U.`access` >= RAND()) LIMIT 0, 1

统计信息

  • 总下载量: 18
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 1
  • 依赖项目数: 1
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 1
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-03-06

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固