guanguans / think-soar
SQL optimizer and rewriter extension package for thinkphp5 framework.
Fund package maintenance!
Patreon
www.guanguans.cn/images/wechat.jpeg
Installs: 530
Dependents: 0
Suggesters: 0
Security: 0
Stars: 75
Watchers: 2
Forks: 17
Open Issues: 1
Requires
- guanguans/soar-php: ^1
- topthink/think: ~5.1 || ~5.2 || ^6.0.0
Requires (Dev)
- phpunit/phpunit: ^5 || ~7
This package is auto-updated.
Last update: 2022-05-25 10:17:39 UTC
README
!本项目不再维护,如果有人愿意接手维护可以联系我。
SQL 语句优化器和重写器
适用于 thinkphp5 SQL 语句优化器扩展包,基于 guanguans/soar-php
环境要求
安装
$ composer require guanguans/think-soar --dev
使用
下载 XiaoMi 开源的 SQL 优化器 soar,更多详细安装请参考 soar install
# macOS $ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.darwin-amd64 # linux $ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64 # windows $ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.windows-amd64 # 用其他命令或下载器下载均可以
配置,更多详细配置请参考 soar config
拷贝 config\soar.php
到 thinkphp
配置目录下,修改对应的配置,并设置 thinkphp
的 app_debug
、trace
配置为 true 。
SQL 评分
方法调用示例:
<?php namespace app\index\controller; use think\Db; class Index { public function tests() { $user = Db::table('fa_user')->where('id', 1)->select(); $sql = Db::table('fa_user')->fetchSql()->select(); // 最后一条sql语句评分 echo soar_score(); // 指定sql语句评分 echo soar_score($sql); echo soar()->score($sql); } }
输出结果:
explain 信息解读
方法调用示例:
<?php namespace app\index\controller; use think\Db; class Index { public function tests() { $user = Db::table('fa_user')->where('id', 1)->select(); $sql = Db::table('fa_user')->fetchSql()->select(); // 最后一条sql语句explain信息解读 echo soar_html_explain(); echo soar_md_explain(); // 指定sql语句评分explain信息解读 echo soar_html_explain($sql); echo soar_md_explain($sql); echo soar()->htmlExplain($sql); echo soar()->mdExplain($sql); } }
输出结果:
语法检查
方法调用示例:
$sql = 'selec * from fa_user'; echo soar_syntax_check(); echo soar_syntax_check($sql); echo soar()->syntaxCheck($sql);
输出结果:
At SQL 1 : line 1 column 5 near "selec * from fa_user" (total length 20)
SQL 指纹
方法调用示例:
$sql = 'select * from fa_user where id=1'; echo soar_finger_print(); echo soar_finger_print($sql); echo soar()->fingerPrint($sql);
输出结果:
select * from fa_user where id = ?
SQL 美化
方法调用示例:
$sql = 'select * from fa_user where id=1'; var_dump(soar_pretty()); var_dump(soar_pretty($sql)); var_dump(soar()->pretty($sql));
输出结果:
SELECT * FROM fa_user WHERE id = 1;
markdown 转化为 html
方法调用示例:
echo soar_md2html("## 这是一个测试"); echo soar()->md2html("## 这是一个测试");
输出结果:
... <h2>这是一个测试</h2> ...
soar 帮助
方法调用示例:
var_dump(soar_help()); var_dump(soar()->help());
输出结果:
··· 'Usage of /Users/yaozm/Documents/wwwroot/soar-php/soar: -allow-charsets string AllowCharsets (default "utf8,utf8mb4") -allow-collates string AllowCollates -allow-drop-index AllowDropIndex, 允许输出删除重复索引的建议 -allow-engines string AllowEngines (default "innodb") -allow-online-as-test AllowOnlineAsTest, 允许线上环境也可以当作测试环境 -blacklist string 指定 blacklist 配置文件的位置,文件中的 SQL 不会被评审。 ···
执行任意 soar 命令
方法调用示例:
$command = "echo '## 这是另一个测试' | /Users/yaozm/Documents/wwwroot/soar-php/soar.darwin-amd64 -report-type md2html"; echo soar_exec($command); echo soar()->exec($command);
输出结果:
... <h2>这是另一个测试</h2> ...